2014-01-12 9 views
24

...それはどこに文書化されていますか?ハッシュ変数構文はtypescriptでどのように機能しますか?

class MyThing { 
    private _layers: { [id: string] : SimpleLayer } = {}; 
    ... 
} 

を...、それは素晴らしいですが、構文は私に混乱している、動作します:

私は例の場所の周りにこのように見てきました。

「id」とは何ですか?なぜ文法はまったくではないのですか:{string:SimpleLayer}、は役に立ちません。私は{{name:string}:Type}と{[index:string]:Type}も見てきました。

これは実際に文書化されている場所を見つけるためにtypescriptlang.orgを見てきましたが、私はそれをまったく見つけられないようです。

答えて

27

http://blogs.msdn.com/b/typescript/archive/2013/01/24/interfaces-walkthrough.aspx

は、 "インデックス可能なオブジェクトを記述する" を参照してください。これはindex signatureと呼ばれます。

構文は次のとおりです。

[Identifier: KeyType]: ValueType 

KeyTypestringnumberのいずれかになります。

Identifierはどこでも使用されないため実際には必要ではないと主張することができますが、クラス/インターフェースの設計者にハッシュマップキーが示すべきものを示すように強制する必要があると思います、氏名、電子メールアドレスなど)。これはまた、Intellisenseがハッシュキー名を表示する可能性を提供します(Visual Studioが他の言語でもそうです)。しかし、私はTypescript intellisenseが現在これを提供しているとは思いません。

-1

構文は具体的には、blah:{string:SimpleLayer}ような何か単純ではない理由のあなたの質問について:これはあいまいになるので

。この構文はすでに存在していると意味を持っている:

var x: { string: SimpleLayer } 

これは、変数xを宣言します。タイプxにはstringという1つのプロパティがあり、タイプはSimpleLayerです。

var circle: {radius: number} 

これは型である一つの特性(radius)で変数を宣言しています

x.string = new SimpleLayer; 

それは私たちが実際の例を使用した場合より明らかです:私はxを使用したい場合は、私はこれを行うだろうnumber、それはではありませんradiusタイプからnumberタイプへのハッシュマッピングを宣言します。

+1

十分ですが、意味のある理由ではなく、現在の構文の '識別子'が無意味であり、技術的な制限のために存在していることを確認してください。 '{[TKey]:TValue}'や '{{TKey:TValue}}'や 'Hash 'などがあります。 – Doug

関連する問題