动态地向TypeScript类/对象添加更多属性

时间:2015-07-24 06:33:36

标签: attributes typescript

我在TypeScript中有一个类如下:

OOP

现在,在运行时,我的脚本会加载一个包含许多节点的.json文件。每个节点都有不同的属性。我为每个加载的节点创建一个新的Node类Object,并将特定加载节点的属性添加到节点对象中。

如何使用上面的Node类实现此目的?现在我正在使用任何来使其正常工作:

export class Node {
    id: number;
}

“data.json”的示例数据:

export class Main {
    private nodes: any[] = []; // I'd like to use the class Node instead of any here

    constructor() {
        // load json
        var loadedNodes = jsonload("data.json");

        // okay, json loaded
        // now load the json into objects
        for (var nodeIndex in loadedNodes) {
            // check whether the attribute that you are finding is from the object itself and not from up the prototype chain
            if (loadedNodes.hasOwnProperty(nodeIndex)) {
                var loadedNode = loadedNodes.nodes[nodeIndex];
                var node: any = {}; // I'd like to use the class Node instead of any here
                for (var key in loadedNode) {
                    if (loadedNode.hasOwnProperty(key)) {
                        node[key] = loadedNode[key]; // put the attribute into the node object
                    }
                }
                this.nodes.push(node);
        }
    }
}

这可能吗?

1 个答案:

答案 0 :(得分:0)

问题出在var node: any = {};正在创建文字对象而不是Node的实例。

您可以通过以下方式使用Node课程:

var node = new Node();

或者您可以将Node类改为接口:

interface INode {
    // Needs to be optional if the object is going to be empty at first.
    id?: string;
}

// Then define the `node` variable with the interface:

var node: INode = {};