export interface IBranchItem<E> {
    id: string | number;
    label: string;
    parent: string[] | number[];
    extra?: E;
}
export interface IBranchItemTree<E> extends IBranchItem<E> {
    depth: number;
    children?: this[];
    [key: string]: any;
}
type BranchOption = {
    childrenKey: string;
};
export declare class Branch<E> {
    private readonly rawData;
    private readonly builtData;
    private readonly option;
    private readonly isValidRawData;
    constructor(rawData: IBranchItem<E>[], option?: BranchOption);
    build<R extends IBranchItemTree<E>>(): R | IBranchItemTree<E>;
    getTree<R extends IBranchItemTree<E>>(): R | IBranchItemTree<E> | null;
    getRawList<R extends IBranchItem<E>>(): R[] | IBranchItem<E>[];
    getNodes<R extends IBranchItemTree<E>>(id?: string): R[] | IBranchItemTree<E>[] | null;
}
export {};
