这是javascript或打字稿foreach的一种非常常见的用法:
myArray = ["a","b","c"]
for(var index in myArray)
console.log(myArray[index])
代码记录:a b和c
然而在typescript中,“index”var被认为是一个字符串。 。 当我进行任何计算时,例如索引* 2,TS计算器显示以下编译器错误:
for(var index in myArray)
console.log(index * 2); // TS compiler error.
错误TS2362算术运算的左侧必须是 输入'any','number'或枚举类型
但执行时记录0,2和4(如预期的那样)
如何避免或抑制此错误?
答案 0 :(得分:3)
index
是一个字符串。 for..in
遍历对象的键。恰好是数组的键是数字的。不过,他们仍然存储为字符串。
检查出来:
var myArray = [1, 2, 3];
for (var index in myArray) {
console.log(typeof index);
}

还值得注意的是, order 无法保证您获得这些密钥。通常他们会以正确的顺序出现,但例如,获取"3", "1", "2"
对您来说无效。
相反,只需使用普通for
loop.那么您的索引将是数字,并且您确定知道您按顺序在数组中移动。
var myArray = [1, 2, 3];
for (var i = 0; i < myArray.length; i++) {
console.log(typeof i, myArray[i]);
}
&#13;
您也可以使用forEach
来运行它。
var myArray = [1, 2, 3];
myArray.forEach(function(val, index) {
console.log(typeof index, val);
});
&#13;
答案 1 :(得分:2)
这是一个字符串,您可以在其上调用parseInt(index, 10)
。那是因为对象的索引总是字符串,即使在数组上,数组也有一些额外的行为来处理看起来像整数的键
但请注意,迭代数组的方式容易出错。见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
注意:for ... in不应该用于迭代索引顺序很重要的数组。
无法保证按顺序迭代元素
您可以随时转换元素以避免错误
console.log(index as number * 2); /
答案 2 :(得分:2)
考虑您的索引&#39;将是一个数字,您可以通过将索引转换为数字类型来抑制警告/错误
for(var index in myArray)
console.log(Number(index) * 2);
<强>替代地强>
for(var index in myArray)
console.log(parseInt(index) * 2);