typescript 编译为d.ts和Javascript输出的类型脚本枚举

jv4diomz  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(166)

在我的原始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 ;

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

ef1yzkbh

ef1yzkbh1#

来自文档:
常量枚举只能使用常量枚举表达式,并且与正则枚举不同,它们在编译期间会被完全删除。
要在javascript中使用枚举代码,您需要从export const enum中删除const。或者,您可以使用--preserveConstEnums选项编译代码。

相关问题