Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typescript Enums compiling into both d.ts and Javascript output

In my original TS file (foo.ts), I have this:

export const enum ACCESS_STATE {
    master,
    readonly,
    none,
    failed
}

After the Typescript compiler completes, the output (foo.d.ts) file properly contains this:

const enum ACCESS_STATE {
    master = 0,
    readonly = 1,
    none = 2,
    failed = 3,
}

However, the resulting output (foo.js) file has no reference to ACCESS_STATE or its values at all. This isn't a problem in foo.js directly, since the compiler would have properly substituted the ACCESS_STATE.master and other references to the hard value of 0 (etc).

The problem is that I have other javascript modules that require foo and want to reuse the enum.

Is it possible to have the compiler generate something in the foo.js that is referenceable and can be used ? Such as:

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 ;

Why is this not the default behavior of the compiler to generate a re-useable kind of thing that can be a referential substitute for the values in the enum (which is what is generally intended by using an enumeration)?

like image 700
Kim Gentes Avatar asked Dec 08 '25 10:12

Kim Gentes


1 Answers

From the documentation:

Const enums can only use constant enum expressions and unlike regular enums they are completely removed during compilation.

To have enum code in javascript, you need to remove const from export const enum. Alternatively, you can compile your code with --preserveConstEnums option.

like image 73
artem Avatar answered Dec 11 '25 00:12

artem



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!