对于我的新小项目,我决定使用打字稿,原因并不比让自己感觉像是在使用非凡的类固醇编程,而且显然我付出了代价。
我有一个界面,对吧
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];
}
}
}
现在我收到了这个错误
元素隐式具有“任何”类型,因为类型“模型”没有索引签名
在这一行
model[prop] = data[prop];
但是如果我修改我的模型以包含签名
import DataObject from "./data-object";
export default class Model implements DataObject {
[key: string]: any;
...
}
然后没有错误。
为什么界面签名对我的班级没有影响?
答案 0 :(得分:1)
我认为界面不会对实施产生影响。如果将其更改为类并扩展它而不是按预期工作。那是因为您可以以其他方式实现索引,例如属性,请参阅示例(在Uncaught (in promise): Error: Cannot assign to a reference or variable!中)。
StudentsDetails = [];
columns: string[] = [];
constructor(private newService: StudentsService) { }
ngOnInit() {
this.newService.fetchData()
.subscribe(responseStudentsDetails => {
this.StudentsDetails = responseStudentsDetails;
this.columns = Object.keys(this.StudentsDetails[0]);
})
};