Ответ 1
Вот простая и наивная реализация того, о чем вы просите:
interface IDataNode {
id: number;
title: string;
node: Array<IDataNode>;
}
Если вы хотите создать экземпляр указанных узлов из кода:
class DataNode implements IDataNode {
id: number;
title: string;
node: Array<IDataNode>;
constructor(id: number, title: string, node?: Array<IDataNode>) {
this.id = id;
this.title = title;
this.node = node || [];
}
addNode(node: IDataNode): void {
this.node.push(node);
}
}
Использование этого для жесткого кодирования вашей структуры:
let data: Array<IDataNode> = [
new DataNode(1, 'something', [
new DataNode(2, 'something inner'),
new DataNode(3, 'something more')
]),
new DataNode(4, 'sibling 1'),
new DataNode(5, 'sibling 2', [
new DataNode(6, 'child'),
new DataNode(7, 'another child', [
new DataNode(8, 'even deeper nested')
])
])
];