javascript - 编译成 d.ts 和 Javascript 输出的 Typescript 枚举

标签 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,
}

但是,生成的输出 (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/

相关文章:

javascript - js中未定义的路径名

Angular 4全局变量设置问题

TypeScript - 如何在字符串上附加换行符 (\n)?

java - 枚举和模板方法

c# - [Flags] 属性的真正作用是什么?

javascript - 在 Outlook Web Access (OWA) 中阅读电子邮件 header

javascript - 谷歌标签管理器虚拟综合浏览量

javascript - 可选的强类型编译器

c++ - int 或 char enum 到 int ,而不是 ASCII

javascript - 使用 bowserify 从导出模块创建一个新对象