TypeScript 迭代器操作平台错误
我有以下代码片段:
var iterator: IterableIterator<string> = iterBreadth(tree);
for(var item of iterator){
log(item)
}
iterBreadth 只是一个返回迭代器的生成器函数。TypeScript 中的迭代器类型是 IterableIterator<T>,其中我的情况中 T 是一个 string。
我的问题是——为什么在 for..of 迭代器循环这一行, playground 会对我大喊大叫:
?
为什么迭代器仅限于数组和字符串?
我在官方文档中发现,当目标是 ES3 或 ES5 时,for..of 循环中只允许使用数组。但这并不能解释为什么游乐场的错误消息中会出现字符串。
此外,我可以看到 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);
}
答案#1
TypeScript 2.3 为 ES3 和 ES5 目标添加了对生成器和迭代器协议的支持。使用新的 --downlevelIteration 选项,您的示例可以无错误地编译:
tsc --lib es6 --target es5 --downlevelIteration t.ts
--downlevelIteration 选项在 TypeScript Playground 中不可用。
答案#2
您可以使用 for/of 循环遍历字符串的字符:
const str = "str";
for (let char of str) {
console.log(char);
}
输出 :
s
t
r
这就是错误信息显示 string 的原因。
