我有以下代码片段:
var iterator: IterableIterator<string> = iterBreadth(tree);
for(var item of iterator){
log(item)
}
iterBreadth
只是一个返回迭代器的生成器函数。 TypeScript 中的迭代器类型为 IterableIterator<T>
哪里T
是 string
就我而言。
我的问题是 - 为什么 Playground 在 for..of
对我大喊大叫迭代器循环行:
?
为什么迭代器仅限于数组和字符串?
我在 official docs 找到了当针对 ES3 或 ES5 时,for..of
中仅允许数组循环。但这并不能解释字符串在 Playground 错误消息中的作用。
此外,我可以看到 typescript 很难转译 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);
}
最佳答案
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 中不可用。
关于 typescript 迭代器 Playground 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43899523/