我有以下代码片段:
var iterator: IterableIterator<string> = iterBreadth(tree);
for(var item of iterator){
log(item)
}
iterBreadth
只是一个返回迭代器的生成器函数 . TypeScript中的迭代器的类型为 IterableIterator<T>
,其中 T
在我的情况下是 string
.
我的问题是 - 为什么游乐场在 for..of
迭代器循环线上对我大喊大叫:
?
为什么迭代器仅限于数组和字符串?
我在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 回答
打字稿2.3 added support for generators and the Iterator protocol for ES3 and ES5 targets . 使用新的
--downlevelIteration
选项,您的示例编译时没有错误:但是,
--downlevelIteration
选项在打字稿操场中不可用 .您可以使用for / of循环遍历字符串字符:
输出:
这就是为什么错误消息显示
string
的原因 .Nitzan的答案涵盖了一个很好的解决方案 . 如果出于任何原因,您需要将迭代作为数组处理,则可以使用
Array.from()