打字稿枚举编译成d.ts和Javascript输出

时间:2017-06-13 21:25:04

标签: 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(等)。

问题是我有其他 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 ;

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

1 个答案:

答案 0 :(得分:2)

来自documentation

  

Const枚举只能使用常量枚举表达式而不像常规表达式   枚举它们在编译期间被完全删除。

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