4
对于我的新小项目,我决定使用打字稿,原因不外乎让自己感觉像编程c在显着的类固醇上,显然我付出了代价。Typescript接口的实现对索引签名没有任何影响
我有一个接口,右侧
export default interface DataObject {
[key: string]: any
};
按理说它是让我和字符串键和任何值定义的对象。然后,我实现它
import DataObject from "./data-object";
export default class Model implements DataObject {
constructor(data: DataObject = {}) {
Model.fill(this, data);
}
static fill(model: Model, data: DataObject) {
for (let prop in data) {
model[prop] = data[prop];
}
}
}
现在,我得到这个错误
元素隐含有“任意”类型,因为类型“模式”有没有索引签名
在这line
model[prop] = data[prop];
但是,如果我修改我的模型以包含签名
import DataObject from "./data-object";
export default class Model implements DataObject {
[key: string]: any;
...
}
然后没有错误。
为什么界面签名对我的班不起作用?
但这是如何有意义?接口不应该能够首先定义属性,但是既然他们这样做,为什么这些类不会继承签名?没有价值? –
他们没有定义。他们只是说“如果你实施我,就必须有财产”。只有语法看起来相同。在TypeScript中,你可以“实现”或“扩展”某些东西。类可以是“扩展”,接口(和类)可以是“实现”。 – Magu