Enum(列挙型) の使い方がよく解っていなくて調べた話
- 公式ドキュメント
enum GENDER { MALE = 1, FEMALE = 2, } enum GENDER_NAME { MALE = '男性', FEMALE = '女性', }
こんな enum があった場合
- Enumのメンバーを指定して値を取得
console.log(GENDER.MALE); //1
- 逆に、値を指定してメンバー名を取得 //これを勝手に出来ないものだと思っていた
console.log(GENDER[1]); //'MALE'
- (こんなふう利用したかった)
// 1 を '男性' に変換 console.log(GENDER_NAME[GENDER[1]]); //'男性'
値を指定してメンバー名を取得できる理由
- JavaScript にコンパイルされたコードは次のようになっていた
export var GENDER; (function (GENDER) { GENDER[GENDER["MALE"] = 1] = "MALE"; GENDER[GENDER["FEMALE"] = 2] = "FEMALE"; })(GENDER || (GENDER = {}));
- なので 列挙型 GENDER として生成されるのは下記のようなオブジェクトになるようです
Object {1: "MALE", 2: "FEMALE", FEMALE: 1, FEMALE: 2}
- ↑
console.log(GENDER[1]) //"MALE"
に納得!
P.S 上記を踏まえると、Enum をループしたときに下記のようにメンバー名(ここでいう MALE とか)も出力されちゃうのが納得できた
for(let value in GENDER) { console.log(value); //"MALE", "FEMALE", 1, 2 }
- 値だけ出力したい場合は下記のようにした
for(let value in GENDER) { if(!isNaN(value)) { console.log(value); //1, 2 } }
- Enum の上手い使い方がいまいち解っていません。もっと良い方法があれば知りたいです。