interface HierarchicalData { name: string; children?: { [key: string]: HierarchicalData; }; } interface Component { /** Tree or Node kinds. */ kind: Kind; /** Tree or Node name. */ name: string; getChildren: () => Children | undefined; hasChildren: () => boolean; getChildByPaths: (paths: string[], kind: string) => Component | undefined; getHierarchy: () => HierarchicalData; set: (pathName: string, component: Component) => void; remove: (pathName: string, component: Component) => void; } interface Children { [key: string]: Component; } export type { Children, Component, HierarchicalData };