编译器配置项-compilerOptions
输出相关配置项04
导入辅助代码 - importHelpers
对于某些降级操作,TypeScript 将使用一些辅助代码来执行扩展类、展开数组或对象以及异步操作等操作。默认情况下,这些辅助代码被插入到使用它们的文件中。如果在许多不同的模块文件中使用相同的辅助代码,将可能导致辅助代码重复。
如果启用importHelpers
选项,这些辅助代码将从tslib
模块导入。这个需要确保tslib
在运行时已经被导入。该配置项只影响模块文件,全局的JavaScript代码不会尝试导入模块。
例如,有如下TypeScript代码:
export function fn(arr: number[]) {
const arr2 = [1, ...arr];
}
启用 downlevelIteration
选项,并将 importHelpers
设置为false
:
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
export function fn(arr) {
var arr2 = __spreadArray([1], __read(arr), false);
}
启用 downlevelIteration
and importHelpers
选项后,将转换为如下JavaScript代码:
import { __read, __spreadArray } from "tslib";
export function fn(arr) {
var arr2 = __spreadArray([1], __read(arr), false);
}
如果已经提供自己对这些方法的实现,可以启用 noEmitHelpers
选项。
未使用的导入作为values - importsNotUsedAsValues
该选项已弃用,使用verbatimModuleSyntax
选型替换。
这个选项控制import
如何工作,有如下3个选型值:
remove
: 默认的行为,如果仅导入类型的引用,那么将移除该import
语句。preserve
:保留所有未使用的type或者value的import
语句,这将导致import
副作用被保留。error
:像preserve
一样保留所有的import
,但是导入的值仅仅作为类型时将报错。如果需要避免意外的导入,这个选项将非常有用,但是仍然无法避免副作用。
设置这个选项,是因为可以使用import type
语句显式创建一条永远不应该输出到 JavaScript 中的导入语句。