TypeScript ``` importHelpers + module: es2015/esnext emits unused helper imports ```

hrysbysz  于 4个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(67)

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的方法;基本上我只是遵循协议,等待批准。

thtygnil

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 |
| | ); |
| | } |

l3zydbqr

l3zydbqr2#

正如我在原始帖子中已经指出的,修复已经在我的机器上准备好了。我正在等待批准以匹配指南中概述的过程和PR模板。

相关问题