2016-08-22 6 views
2

オブジェクトリテラルを使用する場合、Typescriptのドキュメントによれば、これはインターフェイスと正確に一致する必要があります。それがために、数あるべき指数がそのインデックスの数と値である必要がありますを意味している[index: number]: numberと競合するので、ここで小道具が文字列であるTypescriptコンパイラでエラーが表示されない

code pic from playground

:しかし、次のコード遊び場のためのいずれかのエラーメッセージが表示されませんnameおよびage以外のプロパティ。

バグですか?私が間違っている場合、これがどのように機能しているか説明してください。

+2

コードの画像を投稿しないでください。 –

+0

私は、プレイグラウンドでエラーが表示されていないことを指摘するために投稿しました。 –

+0

遊び場の例のリンクを生成するのはとても簡単です。このようにして、あなたの質問に答えようとする人々は、コードを素早くチェックすることができます。それ以外の場合は、ここでコードを貼り付けるだけで、レビューアはコンパイルしようとすることができますので、常に画像よりも優れた方法です。 –

答えて

1

インターフェイスに必要なプロパティよりも多くのプロパティを指定できます。彼らは良いことである、「暗黙のインデックス署名」を行うことを決めたので(or on the playground

// index.ts 
interface MyInterface { 
    obligatoryProperty: string 
    optionalProperty?: string 
    [index: number]: number 
} 

let impl1: MyInterface = {} // fails compilation 
let impl2: MyInterface = { obligatoryProperty: 'hello' } // compiles fine 
let impl3: MyInterface = { 
    obligatoryProperty: 'hello', 
    optionalProperty: 'hello', 
    2: 2, 
    3: 3, 
    notSpecifiedPropertyThatIsAlsoNotANumber: 'hello', 
} // Still fine 
0

:デモンストレーションとして、このコードを見て!あなたはここの理由について読むことができます。

https://github.com/Microsoft/TypeScript/issues/7059

しかしあなたがキーと値としてnumber非としてnumberを持つプロパティを作成する場合は活字体コンパイラはエラーが表示されます。 Here is an example in the playground.

サイドノート: TypeScriptは可能な限り自由にしようとします。関数シグネチャからパラメータを省略することができます。このexampleを参照してください。

関連する問題