当像ES5那样使用扩展运算符...
将Iterator转换为Array时,使用-downlevelIteration
编译器选项会显示错误。一旦启用,散布运算符似乎就可以完美地工作。我不知道为什么需要指定这个?
启用后,除了从tslib添加更多发出的生成代码外,还有什么缺点/限制吗?
TypeScript Playground扩展运算符中默认未启用-downlevelIteration
的情况无法得到全面测试。
另一个示例:动态创建N个数组(例如3):
[...Array(3).keys()] // output: [0, 1, 2]
来自tsc
的错误消息:
类型'IterableIterator'不是数组类型或字符串类型。使用编译器选项'--downlevelIteration'可以迭代迭代器。
答案 0 :(得分:2)
在阅读了release notes和文章TypeScript 2.3: Downlevel Iteration for ES3/ES5之后,我相信这个问题的答案是downlevelIteration
被禁用,因为您需要(通过配置)决定想要TypeScript如何处理兼容性代码的编译(以支持旧版本的Javascript)。
正如文章中较长的说明所表明的,您必须决定是否要TypeScript内联必要的辅助函数(简单,但可能导致更大的产品包大小)或是否要配置TypeScript。使用tslib
作为依赖项,然后调用其外部方法。
我强烈建议您阅读TypeScript 2.3: Downlevel Iteration for ES3/ES5,以加深了解……并可能是解决您最初问题的另一种方法。
至于为什么downlevelIteration
不是TypeScript Playground中的选项,我不确定。该Playground是开源的,因此您可以肯定地创建一个提交拉取请求…,这样做可能会得到比这个更好的答案!