Правильный способ объявления объекта JSON в Typescript

У меня есть следующий объект JSON в моем приложении Angular 2 и хотел бы знать, что нужно, чтобы объявить его в typescript.

data = [
  {
    'id':1,
    'title':'something'
    'node': [
              {
              'id':1,
              'title':'something'
              'node': []
              }
            ]
  },
  {
    'id':2,
    'title':'something'
    'node': [
              {
              'id':1,
              'title':'something'
              'node': []
              }
            ]
  }
]

Ответ 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')
        ])
    ])
];

Ответ 2

Правильный способ - использовать интерфейс, он не генерирует дополнительный код при компиляции в javascript и предлагает вам возможности статического ввода:

https://www.typescriptlang.org/docs/handbook/interfaces.html