Typescript枚举类型编译成d.ts和JavaScript输出的问题

3
在我的原始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(等等)。
问题在于,我有其他javascript模块需要使用foo并希望重用该枚举。
是否可能让编译器在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 ;

为什么编译器不默认生成可重复使用的东西,可以作为枚举值的引用替代品(这通常是使用枚举时的意图)?
1个回答

5
文档中了解到:
常量枚举只能使用常量枚举表达式,不同于普通的枚举类型,它们在编译过程中完全被删除。
为了在 JavaScript 中使用枚举代码,你需要将“export const enum”中的“const”移除。另外,你也可以使用“--preserveConstEnums”选项来编译你的代码。

我去掉了“const”关键字,它完美地解决了我的问题。感谢您提供了两种可能的解决方案。 - Kim Gentes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接