在Typescript中的生成器`for ... of循环

时间:2017-11-08 15:46:46

标签: typescript ecmascript-6

我正在尝试使用Typescript正确编译以下生成器循环,这在现代浏览器中按预期工作:

/** Should print "x= 1 y= 2" **/
function* gen() { yield [1, 2] }
for (const [x, y] of gen()) { console.log("x=", x, "y=", y) }

但是在通过Typescript运行之后,它失败了。将上面的内容放入the Typescript Playground说明失败,即for-of转换为数组迭代循环,但生成器返回一个对象。

似乎打字稿打破了,如果是这样,这是一个已知的问题?我没有在https://github.com/Microsoft/TypeScript上看到它。

什么是最好的解决方法?在生成器函数上使用Array.from会让我觉得最连贯吗?

1 个答案:

答案 0 :(得分:1)

你是对的,问题是for of循环被转换为es5 / es3目标中的一个简单的数组循环。

如果您将"downlevelIteration": true添加到tsconfig.json,它应该可以使用,并且生成的代码看起来会完全不同。

请注意,如果您有其他for of循环遍历普通数组,则下层迭代将导致性能下降。 (Which is why downlevel iteration is hidden behind a flag)。

另外,我会阅读this,特别是关于使用--importHelpers和tslib'减少代码大小的部分。