typescript中的const enum(tsc.js vs typescript.js)

时间:2016-09-26 10:22:19

标签: typescript webpack

我在打字稿中有const enum

const enum LogLevel {
    TRACE = 0,
    DEBUG = 1,
    INFO = 2,
    WARN = 3,
    ERROR = 4,
    SILENT = 5
}

根据打字稿规范,以下字段:

private foo: number = LogLevel.DEBUG;

应编译为:

this.foo = 1 /* DEBUG */;

当我从命令行(Windows)使用tsc时,它按预期工作。但是当它在webpack项目中使用awesome-typescript-loader进行编译时(使用来自node_modules的typescript.js而不是tsc使用的tsc.js),那么枚举常量不会被内联:

this.foo = LogLevel.DEBUG;

tsc和节点模块版本都相同(2.0.2)。

我认为两者之间应该没有区别。有人知道为什么吗?

2 个答案:

答案 0 :(得分:0)

检查你的tsconfig.json文件。如果有名称为' preserveConstEnums'的设置,请将值设置为' false'。

我查看了typescript 2.0.3 NPM-package,我只能看到我的bundle.js中的静态数字。

答案 1 :(得分:0)

原来它是由tsconfig.json中的declaration选项引起的。如果设置为false,则两个编译会产生上述不一致的结果。但是当它设置为true时,它按预期工作。不确定为什么这面旗帜会对结果产生这样的影响。