Typescript枚举编译为d.ts和Javascript输出

Typescript枚举编译为d.ts和Javascript输出,javascript,typescript,enums,compilation,Javascript,Typescript,Enums,Compilation,在我的原始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, } 但是,结果

在我的原始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\u STATE
或其值的引用。这在
foo.js
中不是问题,因为编译器会正确地将
ACCESS\u STATE.master
和其他引用替换为硬值0(etc)

问题是我还有其他javascript模块需要foo并希望重用enum

是否可以让编译器在
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 ;
为什么这不是编译器生成可重用类型的东西的默认行为,它可以作为枚举中的值的引用替代物(这通常是使用枚举的目的)?

来自:

常量枚举只能使用常量枚举表达式,与常规枚举不同 枚举在编译过程中它们将被完全删除


要在javascript中使用枚举代码,需要从导出常量枚举中删除
const
。或者,您可以使用
--preserveConstEnums
选项编译代码。

我删除了
const
关键字,它非常适合我的情况。感谢您提供这两种可能的解决方案。