Closed MofuMofu2 closed 1 year ago
プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発
列挙型(enum)は、ある型について取り得る値を列挙する(enumerate)方法です。それらは順序付けされていないデータ構造で、キーを値にマッピングします(対応付けます)。
さっぱりわからん。は?
enumerate = 列挙する
列挙型には2つの種類があります。文字列から数値へとマッピングするもの(数値列挙)と、文字列から文字列へとマッピングするもの(文字列列挙)です。
なんか並べるらしい。並べてみるか。
数値列挙 Numeric enums
何も指定しないと0始まりとなる。
// Numeric enums
enum KantoPokemon {
Bulbasaur,
Ivysaur,
Venusaur
}
const firstPokemon = KantoPokemon.Bulbasaur
console.log(firstPokemon) // 0
TypeScriptは、enumの各メンバーの値として数値を自動的に推論しますが、明示的に値を設定することもできます。
// Numeric enums
enum KantoPokemon {
Bulbasaur = 1,
Ivysaur,
Venusaur,
}
const firstPokemon = KantoPokemon.Bulbasaur;
console.log(firstPokemon); // 1
途中で値を変えることもできる。そうするとまた推論される。
// Numeric enums
enum KantoPokemon {
Bulbasaur = 1,
Ivysaur, // 2
Venusaur, // 3
Charmander = 5, // 何もしなければ3の次なので4になる
Charmeleon // 6 5の次なので6
}
const firstPokemon = KantoPokemon.Bulbasaur;
console.log(firstPokemon); // 1
const rizado = KantoPokemon.Charmeleon; //6
In modern TypeScript, you may not need an enum when an object with as const could suffice:
じゃあなんであるの?!
https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums
TypeScriptは昔は独自路線だった。しかし、JavaScriptに習慣を合わせよう、という動きになっている。 v3.4で as constが入ったため、enumはUnion型、またはobject typeで補完できるようになった。
JavaScriptから離れた機能は入れない、という方向性なので使わない方が良い。 古いコードを読み解く際に知っていればいいかな、というかんじ。
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions https://www.kabuku.co.jp/developers/good-bye-typescript-enum https://qiita.com/saba_can00/items/696baa5337eb10c37342
https://www.typescriptlang.org/docs/handbook/enums.html#handbook-content