Есть ли способ иметь/блокировать уникальные значения индекса объекта Enum в Javascript?

Чтение рекомендуемого способа для работы с тип ENUM в Javascript, Я все еще не уверен, потому что я могу сравнить значение с поддельным значением, в то время как я должен сравнивать только с значением типа" enum":

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

 switch( day ){
   case "monday":
     return "Hello"
   case "tuesday":
     return "Hi"
   case "blahblahday":
     return "No"
 }

Строки, которые я сделал переключателем для сравнения с ( "понедельник", "вторник", "бла-бладхаун" ), полностью свободны от моего типа "enum type: DaysEnum", могут предоставляться пользователем, и это может привести к некоторым тонким ошибки, не обнаруженные интерпретатором (например, опечатки).

Есть ли способ иметь/блокировать уникальные значения индекса объекта Enum?

Ответы

Ответ 1

Возможное решение, которое я нашел с ES2015, может быть через Символы

http://putaindecode.io/en/articles/js/es2015/symbols/

Таким образом, у вас есть уникальные "заблокированные" значения, например, у вас есть на других языках, например Java

 const DAY_MONDAY = Symbol();
 const DAY_TUESDAY = Symbol();

 switch(animal) {
   case DAY_MONDAY:
     return "Hello"
   case DAY_TUESDAY:
     return "Hi"
   //there is no way you can go wrong with DAY_BLAHBLAHDAY 
   //the compiler will notice it and throw an error
 }