MofuMofu2 / typescript-sandbox

MIT License
0 stars 0 forks source link

enum型について学習する #28

Closed MofuMofu2 closed 1 year ago

MofuMofu2 commented 1 year ago

https://www.typescriptlang.org/docs/handbook/enums.html#handbook-content

MofuMofu2 commented 1 year ago

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

https://learning.oreilly.com/library/view/puroguramingutypescript-sukerusurujavascriptapurikesiyonkai-fa/9784873119045/ch03.xhtml#:-:text=3.2.13%20%E5%88%97%E6%8C%99%E5%9E%8B

列挙型(enum)は、ある型について取り得る値を列挙する(enumerate)方法です。それらは順序付けされていないデータ構造で、キーを値にマッピングします(対応付けます)。

さっぱりわからん。は?

enumerate = 列挙する

列挙型には2つの種類があります。文字列から数値へとマッピングするもの(数値列挙)と、文字列から文字列へとマッピングするもの(文字列列挙)です。

なんか並べるらしい。並べてみるか。

MofuMofu2 commented 1 year ago

数値列挙 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
MofuMofu2 commented 1 year ago

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

MofuMofu2 commented 1 year ago

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