这看起来像打字稿编译器的问题,但不确定,也许我不理解打字稿类型推断。任何人都可以解释这个问题:
我有这个简单的代码在" TypeAs" ...变量" item"的列表上做某事。得到的类型"任何"当很清楚列表的类型为" TypeA []"。因此,为了具有类型安全性和智能感知,我必须转换类型。
var list: TypeA[] = this.getListOfTypeAs();
for (var item in list) {
var typedItem = (<TypeA> item); //clearly a problem with typescript
为什么?
答案 0 :(得分:5)
作为pointed out by Zev并在the documentation中说明:
for..in
语句以任意顺序迭代对象的可枚举属性。
在TypeScript 1.5+中,您可以使用for...of
迭代数组中的元素:
var list: TypeA[] = this.getListOfTypeAs();
for (let item of list) {
// item is an element of list in here
}
在以前的版本中,您可以使用标准for
循环:
var list: TypeA[] = this.getListOfTypeAs();
for (var i = 0; i < list.length; i++) {
var typedItem = item[i];
}
答案 1 :(得分:3)
因为Javascript&#39; s for...in
遍历对象/数组的属性名称,而不是属性的值。