2017-01-13 4 views
0

私はここについてIndexable Typesを読んでいると、以下の例が与えられます。`index`内部` [インデックス:数]:の必要性は何文字列; `

interface StringArray { 
    [index: number]: string; 
} 

let myArray: StringArray; 
myArray = ["Bob", "Fred"]; 

let myStr: string = myArray[0]; 

私は本当に理由を理解していません我々はここでindexが必要になります。

[index: number]: string; 
^^^^^ 

私がそこに任意の名前を使用することができますし、それが動作すると思われ、例えば:

interface StringArray { 
    [foo: number]: string; 
} 

let myArray: StringArray; 
myArray = ["Bob", "Fred"]; 

let myStr: string = myArray[0]; 

は、私はまた、次の例を見てきました:私は理解し

ngOnChanges(changes: {[propName: string]: SimpleChange}): void { 
    console.log('Changes', changes); 
} 

はインラインインデックス可能な型宣言のいくつかの種類を使用しています。propNameの代わりindex

{[propName: string]: SimpleChange} 

+0

もし私が間違っていると私はあまりにも強く叩かれませんが、これは私が理解していることです:これはインデックスの「署名」であり、名前はそれほど重要ではありませんが、型宣言として。 'string'だけを使用した場合、それは変数名または型である可能性があります。 'string:string'では、型が何であるかについてあいまいさはありません。 – Kaddath

+0

@Kaddath、ええ、署名することもできますが、私には 'interface StringArray { [number]:string; } 'と思われます。ちょうどこの名前が可読性のためだけにあることを確認したいのです –

+0

それだけで書かれた 'number'もまたあなたが実際の値で置き換えようとしている変数かもしれないようです..私も確信を持っていることに興味があります;) – Kaddath

答えて

2

タイプアノテーションの構文を一貫性を保つために(タイプ理論アノテーションに基づいています)、名前の後にタイプを表示する必要があります。たとえば、次は

を(愚かな)であるが、有効なJavaScript:

var number = 5; 

var arr = [number]; 

alert(arr[0]); 

[number]がコードや注釈であるかそうインターフェースで、それはかなりのかもしれ...ファイルを解析して動作するようにしようと想像します簡単ですが、これらのアノテーションはどこにでも現れることがあります。そして、誰かが注釈を書くことを試み、間違ってしまい、実行可能なJavaScriptになります。一貫性と健全性のためにそう

、型注釈が常に同じパターンに従ってください...

{name}: {type} 

あなたはthe link between TypeScript and Type Theoryについての詳細を読むことができます。

+0

おかげさまで、_type-theory注釈の関連リソース_を指摘できますか? –

+1

@ Maximus元のソースへのリンクを追加しました。 – Fenton

+0

ありがとう、私は見てみましょう。だから、基本的に、そこにはどんな名前があるのか​​は関係ありません。そして、それは 'インデックス'が最も適しているようです –

関連する問題