简短的回答:a[i]
是类型any
,不是string
。
长答案:a
是类型string[]
。在 TypeScript 中,由 a 索引的 type 对象的T[]
值number
是 type T
,但通过 a 索引它们string
会导致any
. type 的值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
}