enumify2

1.0.0 • Public • Published

enumify2

A JavaScript library for enums. To be used by transpiled ES6 (e.g. via Babel).

The approach taken by Enumify is heavily inspired by Java enums.

Difference to enumify?

enumify2 adds the initEnum export that allows you to avoid explicit class construction and reduces the overhead of creating an enum.

The basics

Install:

npm install --save enumify2

Use:

import {Enum} from 'enumify2';
 
class Color extends Enum {}
Color.initEnum(['RED', 'GREEN', 'BLUE']);
 
console.log(Color.RED); // Color.RED
console.log(Color.GREEN instanceof Color); // true
 
new Color();
    // Error: Enum classes can’t be instantiated

Or (without explicit class construction):

import {initEnum} from 'enumify2';
const Color = initEnum(['RED', 'GREEN', 'BLUE']);
// etc...

Properties of enum classes

Enums get a static property enumValues, which contains an Array with all enum values:

for (const c of Color.enumValues) {
    console.log(c);
}
// Output:
// Color.RED
// Color.GREEN
// Color.BLUE

The inherited tool method enumValueOf() maps names to values:

console.log(Color.enumValueOf('RED') === Color.RED); // true
true

Properties of enum values

Enumify adds two properties to every enum value:

  • name: the name of the enum value.

    > Color.BLUE.name
    'BLUE'
  • ordinal: the position of the enum value within the Array enumValues.

    > Color.BLUE.ordinal
    2

Adding properties to enum values

initEnum() also accepts an object as its parameter. That enables you to add properties to enum values:

class TicTacToeColor extends Enum {}
 
// Alas, data properties don’t work, because the enum
// values (TicTacToeColor.X etc.) don’t exist when
// the object literals are evaluated.
TicTacToeColor.initEnum({
    O: {
        get inverse() { return TicTacToeColor.X },
    },
    X: {
        get inverse() { return TicTacToeColor.O },
    },
});
 
console.log(TicTacToeColor.O.inverse); // TicTacToeColor.X

More information

  • The directory test/ contains examples.

Readme

Keywords

none

Package Sidebar

Install

npm i enumify2

Weekly Downloads

15

Version

1.0.0

License

MIT

Last publish

Collaborators

  • sdgluck