2016-08-17 9 views
4

JavaScriptでENUM Typeを扱うの"recommended way"を読んで、私はまだ私が唯一の「列挙」型の値を比較する必要がありながら、私は、偽造値との値を比較することができますので、確信がもてない: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" 
} 

文字列私は( "monday"、 "tuesday"、 "blahblahday")と比較するスイッチを私の "列挙型:DaysEnum"から完全に解放して、ユーザーが提供することができ、これはインタプリタによって検出されない微妙なエラーにつながる可能性があります(タイプミスのような)。

Enumオブジェクトのユニークなインデックス値を持つ/ロックする方法はありますか?私はES2015を見つけ

+0

のような他の言語で持っているように、あなたがユニークで、値を「ロック」している。この方法かもしれませんミスタイプを避けたいのであれば、インタプリタでこれをやろうとするのではなく、良いIDEが必要だと思います。例えば。あなたのコード 'switch(day){case DaysEnum.m [onday ...]}'によって自動補完を得ました。 – inf3rno

+1

ありがとうございますが、これはミスタイプに関するものではなく、列挙値の一意性に関するものです(読んでください:特定の値を持つ文字列が私の列挙型に準拠する可能性があり、IMHOが悪いです) – Motocarota

+0

**悪いですが、 – Motocarota

答えて

1

可能な解決策は、

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 
} 
関連する問題