Есть ли способ иметь/блокировать уникальные значения индекса объекта 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
}