Typescript Enums 编译为 d.ts 和 Javascript 输出

Kim*_*tes 3 javascript enums compilation typescript

在我的原始 TS 文件 ( foo.ts) 中,我有以下内容:

export const enum ACCESS_STATE {
    master,
    readonly,
    none,
    failed
}
Run Code Online (Sandbox Code Playgroud)

Typescript 编译器完成后,输出 ( foo.d.ts) 文件正确包含以下内容:

const enum ACCESS_STATE {
    master = 0,
    readonly = 1,
    none = 2,
    failed = 3,
}
Run Code Online (Sandbox Code Playgroud)

然而,生成的输出 ( ) 文件根本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 ;
Run Code Online (Sandbox Code Playgroud)

为什么这不是编译器生成可重用的东西的默认行为,该东西可以作为枚举中的值的引用替代(这通常是使用枚举的目的)?

art*_*tem 5

文档中:

常量枚举只能使用常量枚举表达式,并且与常规枚举不同,它们在编译期间被完全删除。

要在 javascript 中包含枚举代码,您需要constexport const enum. 或者,您可以使用选项编译代码--preserveConstEnums