打字稿编译后缺少导出的匿名函数名称

时间:2018-08-22 21:18:28

标签: typescript

以下TypeScript代码:

const hasName = () => {};
console.log("hasName.name", hasName.name);

function hasName2() {};
console.log("hasName2.name", hasName2.name);

export const noName = () => {};
console.log("noName.name", noName.name);

产生以下结果:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hasName = () => { };
console.log("hasName.name", hasName.name);
function hasName2() { }
;
console.log("hasName2.name", hasName2.name);
exports.noName = () => { };
console.log("noName.name", exports.noName.name);

使用tsconfig:

{"compilerOptions":{"target":"esnext","outDir":"build","module":"commonjs"}}

日志输出为

hasName.name hasName
hasName2.name hasName2
noName.name

TypeScript编译器似乎省略了导出的匿名函数名称。 Babel(7 rc2)保留名称:

"use strict";
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.noName = void 0;

var hasName = function hasName() {};
console.log("hasName.name", hasName.name);

function hasName2() {}
console.log("hasName2.name", hasName2.name);

var noName = function noName() {};
exports.noName = noName;
console.log("noName.name", noName.name);

日志输出为

hasName.name hasName
hasName2.name hasName2
noName.name noName

有没有办法让TS保留名称?

1 个答案:

答案 0 :(得分:1)

  

有没有办法让TS保留名称

不。不使用TS。

您可以将Babel与TypeScript https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html一起使用,但是无论如何,我还是建议远离.name内省,并按原样使用TS。