TypeScript版本: 4.2.0-dev.20201112
搜索词: esm, importHelpers, unused
代码
// @importHelpers: true
// @module: es2015
// @target: es5
// @downlevelIteration: true
const a = [1, 2];
const b = [3, 4]
export const c = [...a, ...b];
预期行为:
仅导入使用的帮助器:
import { __spread } from "tslib";
var a = [1, 2];
var b = [3, 4];
export var c = __spread(a, b);
实际行为:
导入了使用的帮助器以及它们所依赖的帮助器:
import { __read, __spread } from "tslib";
var a = [1, 2];
var b = [3, 4];
export var c = __spread(a, b);
请注意第一行中的额外未使用的导入。
**Playground链接:**https://www.typescriptlang.org/play?downlevelIteration=true&importHelpers=true&target=1&module=5&ts=4.2.0-dev.20201112#code/MYewdgzgLgBAhjAvDA2gRgDQwEwF0DcAUKJLAEZKoDMWALLoQKYAeADiAE6wnQzCUoAdMLhZhgsgSA
附加信息: 我已经有了一个修复这个bug的方法;基本上我只是遵循协议,等待批准。
2条答案
按热度按时间thtygnil1#
我相信这是因为
__spread
使用了__read
:https://github.com/microsoft/tslib/blob/76bedfddc2cad38aa11060a32f56e9484c279c98/tslib.es6.js#L147-L151而且,目前 helper 发出代码的方式并没有区分仅被其他 helper 需要的 helper 和实际需要被转译代码使用的 helper:
TypeScript/src/compiler/factory/emitHelpers.ts
566faa7 中的第 287 行到第 295 行:
| | functioncreateSpreadHelper(argumentList: readonlyExpression[]){ |
| | context.requestEmitHelper(readHelper); |
| | context.requestEmitHelper(spreadHelper); |
| | returnfactory.createCallExpression( |
| | getUnscopedHelperName("__spread"), |
| | /typeArguments/undefined, |
| | argumentList |
| | ); |
| | } |
l3zydbqr2#
正如我在原始帖子中已经指出的,修复已经在我的机器上准备好了。我正在等待批准以匹配指南中概述的过程和PR模板。