打字稿。如何在foreach循环中避免这个错误:“算术运算的左侧必须是'any','number'或枚举类型”?

时间:2016-07-29 22:16:57

标签: javascript foreach typescript compiler-errors

这是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(如预期的那样)

如何避免或抑制此错误?

3 个答案:

答案 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;
&#13;
&#13;

您也可以使用forEach来运行它。

&#13;
&#13;
var myArray = [1, 2, 3];
myArray.forEach(function(val, index) {
  console.log(typeof index, val);
});
&#13;
&#13;
&#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);