Typescript kompilerer ikke enums til tall


Jeg prøver å bruke TypeScript for å skrive JSON-data med et skjema, så jeg trenger at TypeScript-kompilatoren kompilerer enums til tall i JS-utdataene, men jeg får det ikke til å fungere.

Jeg har allerede prøvd en god del ting, dette innlegget ligner på problemet jeg har, men jeg bruker ikke awesome-typescript-loader. Jeg har også prøvd alt i dette Stack Overflow-innlegget, men uten hell. Min ts-config er nedenfor

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

Jeg kjører rett og slett tsc på kommandolinjen i rotkatalogen, det kompilerer alt, men enums blir kompilert som MyEnum_1.MyEnum.FirstValue. Andre ting jeg har prøvd;

  • Endre modulen til ulike forskjellige alternativer
  • Endre målet til ulike forskjellige alternativer
  • Legge til forskjellige alternativer og leke med forskjellige lib-verdier.

Jeg kjører tsc -v 3.6.4 og har gått tom for ideer, har noen hatt et lignende problem?

REDIGER: Nedenfor er et eksempel på typen enum jeg importerer

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

REDIGER: Et eksempel på en TypeScript-fil ville være...

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

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

Jeg ville forvente at dette kompilerer til...

"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
};

I stedet kompilerer det til;

"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
};

Jeg bryr meg stort sett ikke om hvordan det kompileres så lenge enumen kompileres til et tall.

Svar #1

Du ser etter konstante enums:

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

kompileres til

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

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

og hvis du vil hoppe over enum-deklarasjonen helt, gjør den også ambient:

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

gir bare

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

Relaterte artikler