使用Typescript描述具有动态添加属性的类

时间:2017-07-07 21:32:31

标签: typescript knockout.js

我试图将Typescript定义添加到碰巧使用Knockout库的现有代码库中。代码包含一个非常常见的模式,如下所示:

interface SomeProperties {
    // A bunch of properties
}

class ViewModel {
    // Some properties of my own...

    constructor(data: SomeProperties) {
        AddAllPropertiesToThis(data);
    }
}

AddAllPropertiesToThis获取数据对象并将其所有属性动态添加到this

我无法弄清楚如何在Typescript中表达这种模式。说出类似

之类的内容是有道理的
class ViewModel implements SomeProperties

但这需要手动将接口定义中的所有属性复制到类中。

有没有办法在不必输入冗余属性的情况下完成我需要做的事情?

1 个答案:

答案 0 :(得分:1)

您可以在ViewModel中引入成员变量data: SomeProperties

interface SomeProperties {
    // A bunch of properties
}

class ViewModel {
    data: SomeProperties;

    constructor(data: SomeProperties) {
        // deep copy the data
        this.data = { ...data };
    }
}

对我而言,通过组合作为上面的代码而不是继承来实现它更有意义。 ViewModel包含(有)SomeProperties。它不是SomeProperties的延伸(“是一种”关系)。