2017-11-15 5 views
0

非同期ライブラリーは、この宣言`type {}`と `Dictionary <T>との違い{[key:string]:T; } `

export interface Dictionary<T> { [key: string]: T; } 

を使用していますが、私は混乱しています、これはどのよう

type {} 

は異なるのですか?

おそらくtype {}は、Symbolをキーに使用できるようにし、辞書インターフェイスではキーのみを文字列にすることができますか?ここ

は非同期のためにタイピングしている: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/async/index.d.ts#L9

答えて

3

--noImplicitAnyを使用する場合{}ではないだろうが、それはないため、上記Dictionary<T>界面におけるインデックス署名は、任意の文字列ベースのプロパティへのアクセスを可能にします、--noImplicitAnyを使用しないときにこれが問題ではありません

interface Dictionary<T> { [key: string]: T; } 

let a: Dictionary<string> = {}; 
let b: {} = {}; 

a["one"] = "two"; // OK 
b["two"] = "three"; // Not OK 

:インデックス署名を持っていますまたは--suppressImplicitAnyIndexErrorsが使用されます。これは、すべてのオブジェクト型が、デフォルトで暗黙の「any-to-any」インデックス署名を持つものとして扱われるためです。

+0

ありがとうございます、シンボルについてはどうですか、それについての考えはありますか? – Olegzandr

+1

関連する 'suppressImplicitAnyIndexErrors'オプションについても言及していますか? – cartant

+0

恐らく、シンボルのプロパティは常にStringsに強制されますか? – Olegzandr

関連する問題