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