我有一个扩展课程static mapping: { [key: string]: typeof FrameModel } = {
for (var key in Object.keys(window)){
var val = window[key];
// ... some checks ...
DiscriminatorMapping.mapping[key] = <typeof FrameModel> val;
}
的课程地图,请参阅TypeScript - storing a class as a map value?。
lib.d.ts
然而,TS不喜欢最后一行,说“错误TS2352:既没有类型'Window'也没有类型'typeof FrameModel'可以分配给另一个。”
在declare var window: Window;
中,定义为:window
为什么TS也将此应用于<any>
的属性?
我可以用declare window.MyClass: FrameModel
来阻止这种情况,但我想知道如何正确地做到这一点
请注意,我事先并不知道该属性的名称,因此我无法执行{{1}}之类的操作。
答案 0 :(得分:0)
您的迭代错误。
应该是:
for (var key in window) {
var val = window[key];
...
}
或者:
let keys = Object.keys(window);
for (var i in keys) {
let key = keys[i];
let val = window[key];
...
}
或使用forEach:
Object.keys(window).forEach(key => {
let val = window[key];
...
});
您收到该错误的原因是因为Window
interface有很多命名属性,然后是at the end:
interface Window {
...
[index: number]: Window;
}
这意味着您使用索引在Window
中访问的任何内容都属于Window
类型
绕过刚转换为any
:
for (var key in window) {
var val = window[key] as any;
// ... some checks ...
DiscriminatorMapping.mapping[key] = <typeof FrameModel> val;
}