首页 文章

typescript迭代器操场错误

提问于
浏览
2

我有以下代码片段:

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.3 added support for generators and the Iterator protocol for ES3 and ES5 targets . 使用新的 --downlevelIteration 选项,您的示例编译时没有错误:

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

    但是, --downlevelIteration 选项在打字稿操场中不可用 .

  • 2

    您可以使用for / of循环遍历字符串字符:

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

    输出:

    s t r

    这就是为什么错误消息显示 string 的原因 .

  • 1

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

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

相关问题