首页 > 解决方案 > 为什么`downlevelIteration`默认不开启?

问题描述

当目标 ES5 使用扩展运算符...将 an 转换Iterator为 anArray时,它会显示使用-downlevelIteration编译器选项的错误。一旦开启,点差操作员似乎就可以完美地工作。

我想知道为什么需要指定这个?除了从 tslib 添加更多发出的生成代码之外,启用它时是否有任何缺点/限制?

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

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

它在 VS Code 中显示错误:
在此处输入图像描述

错误消息来自tsc

类型“IterableIterator”不是数组类型或字符串类型。使用编译器选项“--downlevelIteration”来允许迭代器的迭代。

在 TypeScript Playground 中编辑和查看代码和错误

标签: typescript

解决方案


在阅读了发行说明和文章在 TypeScript 中 ES3/ES5 的 Downlevel Iteration 之后,我相信这个问题的答案downlevelIteration是禁用的,因为您需要(通过配置)决定您希望 TypeScript 如何处理兼容性代码的编译(到支持旧版本的 Javascript)。

正如文章中更冗长的解释所表明的那样,您必须决定是否希望 TypeScript 内联必要的辅助函数(简单,但可能导致更大的生产包大小),或者您是否希望将 TypeScript 配置tslib为一个依赖项,然后调用它的外部方法。

我强烈推荐阅读TypeScript 中 ES3/ES5 的 Downlevel Iteration 以更深入地理解……并且可能是您最初问题的替代解决方案。


推荐阅读