打字稿未将枚举汇总为数字

时间:2019-10-18 10:54:12

标签: typescript enums tsc

我正在尝试使用Typescript本质上使用模式写入json数据,因此我需要Typescript编译器将枚举编译为js输出中的数字,但是我无法使用它。

我已经尝试了很多事情,this帖子与我遇到的问题类似,但是我没有使用awesome-typescript-loader,我也尝试了所有操作{{3}堆栈溢出,但没有喜悦。我的ts-config在下面

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitAny": false,
    "removeComments": true,
    "preserveConstEnums": false,
    "sourceMap": false
},
    "include": [
      "src/**/*"
    ]
  }

我只是在根目录中的命令行上调用tsc,它编译所有内容,但枚举被编译为MyEnum_1.MyEnum.FirstValue。 我尝试过的其他事情;

  • 将模块更改为各种不同的选项
  • 将目标更改为各种不同的选项
  • 添加不同的选项并使用不同的lib值。

我正在运行tsc -v 3.6.4,并且用尽了主意,有人遇到过类似的问题吗?

编辑:以下是我要导入的枚举类型的示例

export enum MyEnum {
    Undefined,
    FirstValue,
    SecondValue,
    ThirdValue
}

编辑:我的打字稿文件示例是...

import { MyEnum } from "../../src/models/MyEnum";
import { ItemType } from "../../src/models/ItemType";

var item: ItemType = { 
    "id": "00000000-0000-0000-0000-000000000000",
    "value": MyEnum.FirstValue
}

我希望它将编译为...

"use strict";
exports.__esModule = true;
var MyEnum_1 = require("../../src/models/MyEnum");
var ItemType_1 = require("../../src/models/ItemType");
var item = {
    "id": "00000000-0000-0000-0000-000000000000",
    "value": 1
};

相反,它会编译为;

"use strict";
exports.__esModule = true;
var MyEnum_1 = require("../../src/models/MyEnum");
var ItemType_1 = require("../../src/models/ItemType");
var item = {
    "id": "00000000-0000-0000-0000-000000000000",
    "value": MyEnum_1.MyEnum.FirstValue
};

只要枚举被编译为数字,我几乎不在乎它如何编译。

1 个答案:

答案 0 :(得分:2)

您正在寻找const enums

export const enum MyEnum {
    Undefined,
    FirstValue,
    SecondValue,
    ThirdValue
}
var item = { 
    "id": "00000000-0000-0000-0000-000000000000",
    "value": MyEnum.FirstValue
}

编译为

var MyEnum;
(function (MyEnum) {
// stuff
})(MyEnum || (MyEnum = {}));

var item = {
    "id": "00000000-0000-0000-0000-000000000000",
    "value": 1 /* FirstValue */
};

,如果您想完全跳过枚举声明,请将其也设置为ambient

export declare const enum MyEnum {
   ...
}
var item = { 
    "id": "00000000-0000-0000-0000-000000000000",
    "value": MyEnum.FirstValue
}

给与

var item = {
    "id": "00000000-0000-0000-0000-000000000000",
    "value": 1 /* FirstValue */
};