2016-08-03 12 views
0

私は、クラスFrameModelを拡張するクラスのマップを持っています。TypeScript - storing a class as a map value?を参照してください。TypeScript - <typeof FrameModel>ウィンドウ["FrameModel"];を再入力できません。

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; 
} 

しかし、TSはと言って、最後の行が好きではありません「というエラーTS2352を:。どちらのタイプ 'ウィンドウのNOR型 『typeof演算FrameModelは』他に割り当てています」 lib.d.ts

、定義は次のとおりです。declare var window: Window; はなぜTSはあまりにもwindowの性質にこれを適用するのでしょうか?

私は<any>でそれを防ぐことができますが、私はそれを正しく行う方法が不思議でした。
私は前もってプロパティの名前を知らないので、declare window.MyClass: FrameModelのようなことはできません。

答えて

0

あなたの繰り返しは間違っています。

それはどちらかのはずBE:

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; 
} 
関連する問題