typescript迭代器操场错误

时间:2017-05-10 17:50:41

标签: typescript iterator iteration

我有以下代码段:

var iterator: IterableIterator<string> = iterBreadth(tree);
for(var item of iterator){
  log(item)
}

iterBreadth只是一个返回迭代器的生成器函数。 TypeScript中的迭代器属于IterableIterator<T>类型,其中T在我的情况下是string

我的问题是 - 为什么游乐场在for..of迭代器循环线上对我大喊大叫:

enter image description here

为什么迭代器仅限于数组和字符串?

我在official docs发现,在定位ES3或ES5时,for..of循环中只允许使用数组。但这并没有解释在操场上erorr消息中字符串的作用。

此外,我可以看到打字稿很难转换for..of。以下代码似乎是精确地针对数组进行转换的,因为它只是迭代索引(0,1,2),而不是调用next:

var iterator = iterBreadth(tree);
for (var _i = 0, iterator_1 = iterator; _i < iterator_1.length; _i++) {
    var item = iterator_1[_i];
    log(item);
}

3 个答案:

答案 0 :(得分:2)

Typescript 2.3 added support for generators and the Iterator protocol for ES3 and ES5 targets。使用新的--downlevelIteration选项,您的示例编译时没有错误:

tsc --lib es6 --target es5 --downlevelIteration t.ts

--downlevelIteration选项在typescript playground中不可用。

答案 1 :(得分:1)

您可以使用for / of循环迭代字符串字符:

const str = "str";
for (let char of str) {
    console.log(char);
}

输出:

  

取值
  Ť
  r

这就是错误消息显示为string的原因。

答案 2 :(得分:0)

Nitzan的答案涵盖了一个很好的解决方案。如果出于任何原因,您需要将迭代作为数组处理,则可以使用Array.from()

var iterator: IterableIterator<string> = iterBreadth(tree);
for(var item of Array.from(iterator)){
    log(item)
}