Typescript`for…of`loop中的生成器

Typescript`for…of`loop中的生成器,typescript,ecmascript-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) } 但在通过Typescript运行之后,它失败了。将上述内容放到中说明了失败,即的转换为数组迭代循环,但生成器返回一个对象 似乎Typescript被破坏了

我正在尝试让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运行之后,它失败了。将上述内容放到中说明了失败,即的
转换为数组迭代循环,但生成器返回一个对象

似乎Typescript被破坏了,如果是这样,这是一个已知的问题吗?我没有在电视上看到它


最好的解决办法是什么?使用生成器函数上的
Array.from
我认为是最连贯的?

您是正确的,问题是
for of
循环正在传输到es5/es3目标中的一个简单数组循环

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

请注意,如果在普通数组上迭代的
循环中有其他的for,那么底层迭代将导致性能的轻微下降。()


此外,我还会阅读,特别是关于“使用--importpers和tslib减少代码大小”的部分。

如果您希望typescript保持代码不变,可以在编译器选项中将es6指定为目标:“target”:“es6”@AlekseyL。目标是使Knockout.js库与ES3兼容。在操场上运行示例实际上会导致错误:“Type'IterableIterator'不是数组类型或字符串类型。”请参阅@str。有趣。我在Chrome63中没有看到这个错误。