Jaká je preferovaná syntaxe pro definování výčtů v JavaScriptu?

Jaká je preferovaná syntaxe pro definování výčtů v JavaScriptu? Něco jako:

my.namespace.ColorEnum = {
    RED : 0,
    GREEN : 1,
    BLUE : 2
}

// later on

if(currentColor == my.namespace.ColorEnum.RED) {
   // whatever
}

Nebo existuje vhodnější idiom?

Odpověď

Od 1.8.5 je možné předmět zapečetit a zmrazit, takže definujte výše uvedené jako:

const DaysEnum = Object.freeze({"monday":1, "tuesday":2, "wednesday":3, ...})

nebo

const DaysEnum = {"monday":1, "tuesday":2, "wednesday":3, ...}
Object.freeze(DaysEnum)

a voila! JS výčty.

To vám však nebrání v přiřazení nežádoucí hodnoty proměnné, což je často hlavním cílem výčtů:

let day = DaysEnum.tuesday
day = 298832342 // goes through without any errors

Jedním ze způsobů, jak zajistit vyšší stupeň bezpečnosti typu (pomocí výčtů nebo jinak), je použít nástroj jako TypeScript nebo Flow.

Zdroj

Citáty nejsou potřeba, ale nechal jsem si je kvůli konzistenci.