在我原来的 TS 文件 (foo.ts
) 中,我有这个:
export const enum ACCESS_STATE {
master,
readonly,
none,
failed
}
Typescript 编译器完成后,输出 (foo.d.ts
) 文件正确包含以下内容:
const enum ACCESS_STATE {
master = 0,
readonly = 1,
none = 2,
failed = 3,
}
但是,生成的输出 (foo.js
) 文件根本没有引用 ACCESS_STATE
或其值。这在 foo.js
中不是直接的问题,因为编译器会正确地替换 ACCESS_STATE.master
和其他对硬值 0(等)的引用。
问题是我有其他需要 foo 的 javascript 模块并且想重用枚举。
是否可以让编译器在 foo.js
中生成一些可引用且可以使用的东西?如:
var ACCESS_STATE = (function () {
function ACCESS_STATE () {
this.master = 0;
this.readonly = 1;
this.none = 2;
this.failed = 3
}
return ACCESS_STATE ;
}());
foo.ACCESS_STATE = ACCESS_STATE ;
为什么这不是编译器的默认行为来生成可重用的东西,这些东西可以作为枚举中值的引用替代(这通常是使用枚举的目的)?
最佳答案
来自documentation :
Const enums can only use constant enum expressions and unlike regular enums they are completely removed during compilation.
要在 javascript 中使用枚举代码,您需要从 export const enum
中删除 const
。或者,您可以使用 --preserveConstEnums
选项编译您的代码。
关于javascript - 编译成 d.ts 和 Javascript 输出的 Typescript 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44531813/