短い答え:a[i]
タイプは でありany
、 ではありませんstring
。
長い答え:a
タイプはstring[]
です。TypeScript では、 a によってインデックス付けされた型のオブジェクトは typeT[]
のnumber
値になりますが、 aT
によってそれらをインデックス付けするstring
と、any
. 型の値はany
、他の型に自由に変換できます。
なんで?
文字列で配列にインデックスを付けると、コンパイラは何が起こるかを予測することができず、any
. 検討:
// Elsewhere...
Array.prototype.danger = 35;
// Meanwhile, back at the ranch:
var a = [ 'z' ];
var i: string;
for (i in a) {
var x = a[i]; // i = 'danger', a[i] = 35...
}
誰もあなたのオブジェクトをいじったりしないと本当に確信している場合、または既知の安全な文字列値のセットからインデックスを取得している場合は、インデックス型を記述できます。文字列でインデックスを作成している場合は、配列ではなくオブジェクトを使用する方がよいでしょう。
var a: {[s: string]: string; } = {};
a['hello'] = 'world';
var i:string;
for (i in a) {
var c : number = a[i]; // Issues an error
}