Declaring static constants in ES6 classes? Declaring static constants in ES6 classes? javascript javascript

Declaring static constants in ES6 classes?


Here's a few things you could do:

Export a const from the module. Depending on your use case, you could just:

export const constant1 = 33;

And import that from the module where necessary. Or, building on your static method idea, you could declare a static get accessor:

const constant1 = 33,      constant2 = 2;class Example {  static get constant1() {    return constant1;  }  static get constant2() {    return constant2;  }}

That way, you won't need parenthesis:

const one = Example.constant1;

Babel REPL Example

Then, as you say, since a class is just syntactic sugar for a function you can just add a non-writable property like so:

class Example {}Object.defineProperty(Example, 'constant1', {    value: 33,    writable : false,    enumerable : true,    configurable : false});Example.constant1; // 33Example.constant1 = 15; // TypeError

It may be nice if we could just do something like:

class Example {    static const constant1 = 33;}

But unfortunately this class property syntax is only in an ES7 proposal, and even then it won't allow for adding const to the property.


class Whatever {    static get MyConst() { return 10; }}let a = Whatever.MyConst;

Seems to work for me.


I'm using babel and the following syntax is working for me:

class MyClass {    static constant1 = 33;    static constant2 = {       case1: 1,       case2: 2,    };    // ...}MyClass.constant1 === 33MyClass.constant2.case1 === 1

Please consider that you need the preset "stage-0".
To install it:

npm install --save-dev babel-preset-stage-0// in .babelrc{    "presets": ["stage-0"]}

Update:

currently use stage-3