我正在尝试创建一个自定义的迭代器。
这是我的代码的简化示例:
class SortedArray {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
return 4;
}
}
const testingIterables = new SortedArray();
for(let item of testingIterables as any) { // i have to cast it as any or it won't compile
console.log(item);
}
该代码将在ES6上正确运行,但是使用TypeScript它将编译并且不打印可迭代的值。
这是TypeScript中的错误,还是我缺少什么?
谢谢
这不是错误。这取决于您的目标。
TypeScript做出了一个(非常糟糕的)设计决策,即如果将TS转换for..of
为ES5或ES3,它会发出一个正常for (var i; i < testingIterables.length; i++)
循环。
因此,对于目标ES5和ES3,for..of
循环中仅允许使用数组和字符串。
有几种解决方法:
downlevelIteration
标志设置为true,这将导致TypeScript正确地编译迭代器,但是这意味着对于不支持的浏览器,您必须在运行时中包含Symbol.iterator polyfill,否则您可能会遇到意外运行时错误的风险这些浏览器的位置。while
和调用您自己解开迭代器testingIterables.next()
。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句