循环内的Typescript类型推断

时间:2015-06-06 19:47:59

标签: typescript

这看起来像打字稿编译器的问题,但不确定,也许我不理解打字稿类型推断。任何人都可以解释这个问题:

我有这个简单的代码在" TypeAs" ...变量" item"的列表上做某事。得到的类型"任何"当很清楚列表的类型为" TypeA []"。因此,为了具有类型安全性和智能感知,我必须转换类型。

    var list: TypeA[] = this.getListOfTypeAs();
    for (var item in list) {
        var typedItem = (<TypeA> item); //clearly a problem with typescript 

为什么?

2 个答案:

答案 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遍历对象/数组的属性名称,而不是属性的值。