Creates a JavaScript enum object
const createEnum = (...names) => {
const elements = {};
const realEnum = {};
names.forEach((name) => { elements[name] = Symbol(name); });
realEnum.all = () => Object.assign({}, elements);
realEnum.has = (element) => Object.values(elements).indexOf(element) !== -1;
Object.entries(elements).forEach(([key, value]) => { realEnum[key] = value; });
Object.freeze(realEnum);
return realEnum;
};
// Usage
const colors = createEnum(
'BLUE',
'GREEN',
'RED'
);
const blue = colors.BLUE;
const red = 'RED';
colors.has(blue); // true
colors.has(red); // false
colors.all(); // { BLUE: Symbol(), GREEN: Symbol(), RED: Symbol() }