我试图将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
但这需要手动将接口定义中的所有属性复制到类中。
有没有办法在不必输入冗余属性的情况下完成我需要做的事情?
答案 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
的延伸(“是一种”关系)。