■ はじめに
TypeScript で、 Enum を使いたかったが どうも使わない方がいいらしい。 で、その代わりに、Union型 / const assertionを使おうっ て話があるので、調べてみた。
実行環境
https://www.typescriptlang.org/play
目次
【1】Enum - 列挙型 1)サンプル 2)Enum を使わない方がいい理由 【2】Union - 合併型 1)サンプル 【3】const assertion 1)サンプル
【1】Enum - 列挙型
* 他の言語にもあるお馴染みのEnum => 関連する値を纏めるもの * C言語の Enum とはほぼ同じイメージ
1)サンプル
enum UserType { None = '', Admin = 'Admin', User = 'User', };
2)Enum を使わない方がいい理由
以下に記載されている。 => 個人的には、Enumの方が扱いやすいし可読性が高いと思うが 参考文献にあるように「世の流れにのって union 型に切り替えて」 って流れになるんだろうなーって思う。
https://www.kabuku.co.jp/developers/good-bye-typescript-enum
https://engineering.linecorp.com/ja/blog/typescript-enum-tree-shaking/
https://qiita.com/saba_can00/items/696baa5337eb10c37342
参考文献
https://typescript-jp.gitbook.io/deep-dive/type-system/enums
【2】Union - 合併型
* 複数の型/値を定義できる => 「id: string | number」だと、id は 文字列と数値どちらも扱える * C言語の Union とは全く違う
1)サンプル
// Union で 3種類定義 type UserType = "None" | "Admin" | "User"; const userType: UserType = "Admin"; console.log(userType);
参考文献
https://typescript-jp.gitbook.io/deep-dive/type-system/discriminated-unions
【3】const assertion
* TypeScript3.4から導入された機能 * オブジェクト・配列に対して readonly を付与してくれる
1)サンプル
const UserType = { None: '', Admin: 'Admin', User: 'User' } as const; type UserType = typeof UserType[keyof typeof UserType]; const userType1: UserType = 'Admin'; console.log(userType1); // Loopも可能 for (const userType2 of Object.values(UserType)) { console.log(userType2); }
参考文献
https://www.cyokodog.net/blog/typescript-enum-replacement/
https://moyapro.com/2019/04/11/typescript-union-vs-enum/
関連記事
TypeScript ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/21/180904
TypeScript ~ 型エイリアス (Type Alias) ~
https://dk521123.hatenablog.com/entry/2022/04/02/000000
JavaScript ~ 列挙型 ~
https://dk521123.hatenablog.com/entry/2015/12/11/093900