2017-11-23 8 views
0

結局、これは本当に簡単な質問かもしれません。しかし、私はまだ解決策を見つけられませんでした。TypeScriptでシグネチャインデックスを持つ動的オブジェクトを拡張する

私はシグネチャインデックスで定義された動的オブジェクトを持っています。通常、すべてのプロパティはstring型でなければなりません。しかし、いくつかの例外があります。たとえば、widthは、常にタイプnumberでなければなりません。私は私のインターフェイスに追加するときしかし、私はエラーを取得する

error TS2411: Property 'width' of type 'number' is not assignable to string index type 'string'. 

これは私のインターフェイスのようになります。

interface DynamicStyleObject { 
    [ key : string ] : string; 
    width : number; 
} 

答えて

0

時々あなたの財産をnumberすることができた場合は、インデックスの種類string | numberを作ることができるので、これは、数値または文字列のいずれかのプロパティを受け入れます。

interface DynamicStyleObject { 
    [ key : string ] : string|number; 
    width : number; 
} 

参考:Discriminated unions, also known as tagged unions or algebraic data types pattern

+0

だから、 'STRING'だけ' 'number'を持つwidth'ためのデフォルトの型を持つことが可能ではないでしょうか? – lumio

+0

オハイオ州オクラホマ、私はちょうど私がこのように "伸ばす"ことができたことを発見しました。一般に 'string'と' number'の両方が許されますが、 'width'では' number'だけが有効です。 – lumio

+0

@lumioはい、それは私が意味するものです、残念ですが、私はwidthプロパティを追加することを忘れました(私は更新しました)。ポイントは、 'string | number'はstring型とnumber型のプロパティを許可します。このようにして、' width:number'や 'display:string'のようなタイプのプロパティを厳密に指定することができます。 –

関連する問題