Je suis à la reconstruction d'un vieux projet Java en Javascript, et se rendit compte qu'il n'y a pas de bonne façon de faire des enums en JS.
Le mieux que je puisse vous arriver, c'est:
const Colors = {
RED: Symbol("red"),
BLUE: Symbol("blue"),
GREEN: Symbol("green")
};
Object.freeze(Colors);
L' const
conserve Colors
d'être réaffectés, et la congélation empêche la mutation des clés et des valeurs. Je suis à l'aide de Symboles, de sorte que Colors.RED
n'est pas égal à 0
, ou quoi que ce soit d'autre à part lui-même.
Est-il un problème avec cette formulation? Est-il un meilleur moyen?
(Je sais que cette question est un peu une répétition, mais tous les précédents Q/Comme sont assez anciennes, et ES6 nous donne quelques nouvelles fonctionnalités.)
EDIT:
Une autre solution, qui traite de la sérialisation de problème, mais je crois encore a realm questions:
const enumValue = (name) => Object.freeze({toString: () => name});
const Colors = Object.freeze({
RED: enumValue("Colors.RED"),
BLUE: enumValue("Colors.BLUE"),
GREEN: enumValue("Colors.GREEN")
});
En utilisant des références à des objets comme les valeurs, vous obtenez le même pour éviter l'abordage par des Symboles.