2016-12-06 14 views
2

と名前:推測キー次のコードは、Visual Studioのコードでうまく機能活字体

type MyType = { 
    id: number; 
    name: string; 
}; 

type MyTypes = { [name: string]: MyType }; 

const MY_TYPES:MyTypes = { 
    ONE: { id: 0, name: 'name0' }, 
    TWO: { id: 1, name: 'name1' } 
}; 

console.log(MY_TYPES.ONE); //Intellisense error 
console.log(MY_TYPES['ONE']); 

はどちらもログステートメントをコンパイルし、出力も同じことが、最初のものはVSコードと国家の財産でエラーが発生します'ONEは型に存在しません'。私のコードを構造化するための他の方法はありますか?そのため、VSコードはMY_TYPESがプロパティ名を1つと2つ持つことを自動的に推論/自動完成できますか?

答えて

0

あなたがindexed objectを使用している場合は、インデックスのみ使用してプロパティにアクセスすることができます

type MyTypes = { [name: string]: MyType }; 
console.log(MY_TYPES["ONE"]); 

コンパイラはオブジェクトのみが文字列型のキーを持っていることを知っているので、だ、それは特定のキーを知りません。

あなたは、ドット表記を使用してプロパティにアクセスすることができるようにしたい場合は、あなたがこれを実行する必要があります。

type MyTypes = { 
    ONE: MyType; 
    TWO: MyType; 
} 
console.log(MY_TYPES.ONE); 

あなたはしかし、ちょうどこの操作を行うことができます。

type MyTypes = { 
    ONE: MyType; 
    TWO: MyType; 
} 

const MY_TYPES = { 
    ONE: { id: 0, name: 'name0' }, 
    TWO: { id: 1, name: 'name1' } 
}; 

とコンパイラタイプはMY_TYPESと推測されます。

+0

ありがとうございます。あなたのアプローチを使用する代わりに、MyTypesをインターフェイスとして宣言することにしました。私はそれを理解しているようにいくつかの柔軟性を追加して、同様に動作します。 – n83

関連する問題