2017-05-24 14 views
1

私は、タイプ "number"の2つの属性を持つインターフェイスfoobarを持っています。 ここでは、タイプfoobarのオブジェクトを汎用オブジェクト定義にマッチさせようとしています。ここで、各属性はタイプ番号です。TypeScriptの汎用オブジェクトとインターフェイスが一致しません

この結果、次のタイプスクリプトエラーが発生します。

TS2345: 'foobar'型の引数は、 '{[key:string]:number; } '。 'foobar'型にインデックス署名がありません。

型番号の値しか持たない汎用オブジェクトへのインターフェイスにオブジェクトを一致させる方法はありますか?

+0

注目の値https://stackoverflow.com/questions/22077023/why-cant-i-irectirect-return-an-object-literal-to-satisfy-an-index-signature-re –

答えて

1

型番号の値しか持たない汎用オブジェクトへのインタフェースにオブジェクトを一致させる方法はありますか?

号活字体はあなたがこれを書いていないことを知りません。

// OK: This is legal code 
const obj1 = { a: 1, b: 2, c: "oops" }; 
// OK: Structural type matches 
const obj: foobar = obj1; 
// Crash when baz sees c: "oops" 
baz(obj); // error happens here 

この場合、最良のオプションは、ちょうどこのラインからの型注釈を削除するには、次のようになります。

const obj = { 
    a: 1, 
    b: 2 
}; 

オブジェクトリテラルで初期化されたconstなので、TypeScriptはオブジェクト上に他のプロパティがないことを知っていますので、インデックス署名が必要な場所で使用することは安全です(r)。型アノテーションを追加すると、その動作が無効になります。

関連する問題