我正在尝试使用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
会让我觉得最连贯吗?
答案 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'减少代码大小的部分。