に欠けている私はMyInterface.dic
辞書name: value
のようになりたい、私はそれを定義:活字体:次のようにインデックスの署名がタイプ
interface MyInterface {
dic: { [name: string]: number }
}
は今、私は私のタイプを待って関数を作成:
function foo(a: MyInterface) {
...
}
入力:
let o = {
dic: {
'a': 3,
'b': 5
}
}
私はを期待してい0は正しいように、コンパイラは低下している:なぜ typescriptですが、私のタイプを認識していないトリックを行うlet o: MyInterface = { ... }
が、質問は、:
foo(o) // Typescript error: Index signature is missing in type { 'a': number, 'b': number }
私は可能性鋳造があります知っていますか?
エクストラ:o
がインライン宣言されている場合、正常に動作します:
foo({
dic: {
'a': 3,
'b': 5
}
})
> 2番目の署名があります。 実際に私のIDEでは 'o.dicを実行できません。x' – Manu
良いキャッチ、申し訳ありませんが、それは索引構文( 'o.dic ['x'] = 1')だったはずです。更新された例 –
更新!有効な場合、TypeScript 2はこの変換を自動的に行います:https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#implicit-index-signatures –