type MergeNode = INode & { [k in PidKey]?: number; } & { [k in ChildrenKey]?: MergeNode[]; }; /** * 根据给定的键名,将数组转换为树形结构,并返回此树形对象和字典对象。 * 此函数会改变原数组元素对象。 */ export declare function arrayToTree, INodeList extends INode[], IdKey extends string, PidKey extends string, ChildrenKey extends string, MergedNode = MergeNode>(array: INodeList, idKey: IdKey, pidKey: PidKey, childrenKey: ChildrenKey): [MergedNode[], Record]; /** * 遍历树,类似于数组的forEach操作。 */ export declare function walkTree>(tree: INode[], childrenKey: string, callback: (node: INode) => void | boolean): boolean; /** * 遍历树,类似于 walkTree,但会先回调节点,再遍历其子节点。 */ export declare function walkTreeNode>(node: INode, childrenKey: string, callback: (node: INode) => void): void; /** * 遍历祖先节点,会从传递的节点开始 */ export declare function walkAncestor>(node: INode | null | undefined, parentKey: string, callback: (node: INode) => void): void; interface MapTreeOptions { childrenKey?: string; newChildrenKey?: string; parent?: Record; } /** * 类似于数组的 map 操作,会返回一颗新的树; * callback 的返回值会作为树的节点。 */ export declare function mapTree, INode extends Record>(tree: INode[], callback: (node: INode, index: number, parent?: Record) => MappedNode, options?: MapTreeOptions): MappedNode[]; export type ExtraTreeNode = any, INode extends Record = any> = { data: INode; leafCount: number; level: number; reverseLevel: number; parent?: ExtraTreeNode; children?: ExtraTreeNode[]; tableNext?: ExtraTreeNode; prevSibling?: ExtraTreeNode; nextSibling?: ExtraTreeNode; firstChild?: ExtraTreeNode; lastChild?: ExtraTreeNode; } & Extra; /** * 类似于数组的 map 操作,会返回一颗新的树; * 会将 callback 返回值存放在树节点的 data 属性,此节点还包含额外的属性。 */ export declare function mapTreeExtra, MappedNode extends Record, INode extends Record>(tree: INode[], callback: (node: INode, index: number, parent?: Record) => MappedNode, options?: { childrenKey?: string; mergeLast?: boolean; customNode?: (node: ExtraTreeNode) => Extra; parent?: ExtraTreeNode; }, _internalLevel?: number): ExtraTreeNode[]; /** * 将 ExtraTreeNode[] 转换为二维数组,以便使用表格进行展示。 */ export declare function extraTreeToTable = any, INode extends Record = any>(tree: ExtraTreeNode[], mergeLast?: boolean): ExtraTreeNode[][]; export {};