TypeScript编译器-为什么默认情况下不启用downlevelIteration?

时间:2018-11-23 05:54:35

标签: typescript

当像ES5那样使用扩展运算符...将Iterator转换为Array时,使用-downlevelIteration编译器选项会显示错误。一旦启用,散布运算符似乎就可以完美地工作。我不知道为什么需要指定这个?

启用后,除了从tslib添加更多发出的生成代码外,还有什么缺点/限制吗?

TypeScript Playground扩展运算符中默认未启用-downlevelIteration的情况无法得到全面测试。

另一个示例:动态创建N个数组(例如3):

[...Array(3).keys()]  // output: [0, 1, 2]

VS代码中的错误显示:
enter image description here

来自tsc的错误消息:

  

类型'IterableIterator'不是数组类型或字符串类型。使用编译器选项'--downlevelIteration'可以迭代迭代器。

Edit and view the code and error in TypeScript Playground

1 个答案:

答案 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是开源的,因此您可以肯定地创建一个提交拉取请求…,这样做可能会得到比这个更好的答案!