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

Bri*_*unt 6 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) }
Run Code Online (Sandbox Code Playgroud)

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

Typescript 似乎已损坏,如果是这样,这是一个已知问题吗?我在https://github.com/Microsoft/TypeScript上没有看到它。

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

Avi*_*dad 5

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

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

请注意,如果您有其他for of循环在普通数组上进行迭代,则下层迭代将导致性能受到轻微影响。(这就是为什么下层迭代隐藏在标志后面)。

另外,我会阅读这篇文章,特别是关于“使用 --importHelpers 和 tslib 减少代码大小”的部分。