Typescript không biên dịch enums thành số
Tôi đang cố gắng sử dụng TypeScript để thực chất viết dữ liệu JSON với một schema, vì vậy tôi cần trình biên dịch TypeScript biên dịch các enum thành số trong các đầu ra js nhưng tôi không thể làm cho điều này hoạt động.
Tôi đã thử khá nhiều thứ rồi, bài đăng này giống với vấn đề tôi đang gặp nhưng tôi không sử dụng awesome-typescript-loader, tôi cũng đã thử mọi thứ trong bài đăng Stack Overflow này nhưng không thành công. Cấu hình ts của tôi bên dưới
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": false,
"removeComments": true,
"preserveConstEnums": false,
"sourceMap": false
},
"include": [
"src/**/*"
]
}
Tôi chỉ đơn giản gọi tsc trên dòng lệnh trong thư mục gốc, nó biên dịch mọi thứ nhưng enums được biên dịch thành MyEnum_1.MyEnum.FirstValue. Những thứ khác tôi đã thử;
- Thay đổi mô-đun sang các tùy chọn khác nhau
- Thay đổi mục tiêu sang nhiều tùy chọn khác nhau
- Thêm các tùy chọn khác nhau và thử nghiệm với các giá trị lib khác nhau.
Tôi đang chạy tsc -v 3.6.4 và đã cạn ý tưởng, có ai gặp vấn đề tương tự không?
CHỈNH SỬA: Dưới đây là một ví dụ về loại enum mà tôi đang nhập
export enum MyEnum {
Undefined,
FirstValue,
SecondValue,
ThirdValue
}
CHỈNH SỬA: Một ví dụ về tệp typescript của tôi sẽ là...
import { MyEnum } from "../../src/models/MyEnum";
import { ItemType } from "../../src/models/ItemType";
var item: ItemType = {
"id": "00000000-0000-0000-0000-000000000000",
"value": MyEnum.FirstValue
}
Tôi sẽ mong điều này biên dịch thành...
"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
};
Thay vào đó, nó biên dịch thành;
"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
};
Tôi hầu như không quan tâm nó biên dịch như thế nào miễn là enum được biên dịch thành một số.
Câu trả lời #1
Bạn đang tìm kiếm các enum hằng:
export const enum MyEnum {
Undefined,
FirstValue,
SecondValue,
ThirdValue
}
var item = {
"id": "00000000-0000-0000-0000-000000000000",
"value": MyEnum.FirstValue
}
biên dịch sang
var MyEnum;
(function (MyEnum) {
// stuff
})(MyEnum || (MyEnum = {}));
var item = {
"id": "00000000-0000-0000-0000-000000000000",
"value": 1 /* FirstValue */
};
và nếu bạn muốn bỏ qua hoàn toàn khai báo enum, hãy làm cho nó cũng mang tính ngoại cảnh:
export declare const enum MyEnum {
...
}
var item = {
"id": "00000000-0000-0000-0000-000000000000",
"value": MyEnum.FirstValue
}
chỉ cho
var item = {
"id": "00000000-0000-0000-0000-000000000000",
"value": 1 /* FirstValue */
};
