こんにちは!今回はTypeScriptのenumが非推奨になった理由と、代わりの書き方について詳しく解説していきます。
enumが非推奨になった理由
enumは便利な機能に見えますが、いくつかの問題点があります:
- バンドルサイズが大きくなる
- 型安全性が完全ではない
- Tree-shakingが効きにくい
特にバンドルサイズの問題は深刻です。例えば以下のようなenumを見てみましょう:
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT"
}このコードはJavaScriptに変換すると、こんな感じになります:
var Direction;
(function (Direction) {
Direction["Up"] = "UP";
Direction["Down"] = "DOWN";
Direction["Left"] = "LEFT";
Direction["Right"] = "RIGHT";
})(Direction || (Direction = {}));かなり冗長なコードになってしまいますよね。
代わりの書き方
1. constアサーションを使用する
const Direction = {
Up: 'UP',
Down: 'DOWN',
Left: 'LEFT',
Right: 'RIGHT'
} as const;
type Direction = typeof Direction[keyof typeof Direction];これなら型安全性も保てて、バンドルサイズも小さくなります。
2. Union型を使用する
type Direction = 'UP' | 'DOWN' | 'LEFT' | 'RIGHT';シンプルで分かりやすいですね。値の種類が少ない場合はこちらがおすすめです。
3. オブジェクトと型の組み合わせ
const DirectionValue = {
Up: 'UP',
Down: 'DOWN',
Left: 'LEFT',
Right: 'RIGHT'
} as const;
type Direction = typeof DirectionValue;この方法だと、値と型の両方を扱えて便利です。
実際の使用例
新しい書き方を使った実践的な例を見てみましょう:
// 従来のenum
enum UserRole {
Admin = 'ADMIN',
User = 'USER',
Guest = 'GUEST'
}
// 新しい書き方
const Roles = {
Admin: 'ADMIN',
User: 'USER',
Guest: 'GUEST'
} as const;
type Role = typeof Roles[keyof typeof Roles];
// 使用例
function hasPermission(role: Role): boolean {
return role === Roles.Admin;
}移行のタイミング
すでにenumを使っているプロジェクトがある場合は、以下のタイミングで移行することをおすすめします:
- 新規機能の追加時
- リファクタリング時
- パフォーマンス改善時
一度に全てを書き換える必要はありません。少しずつ移行していけば大丈夫です。
まとめ
enumは便利な機能でしたが、より良い代替手段が出てきました。特に as const とUnion型の組み合わせは、型安全性とバンドルサイズの両方を改善できる優れた方法です。
これから新しくTypeScriptのプロジェクトを始める場合は、enumの代わりにここで紹介した方法を使ってみてください。より良いコードが書けるはずです。
TypeScriptのモダンな型設計を学んだあとにAI活用や副業学習まで広げる場合は、有料講座を選ぶ前に、自分にスクールが必要な段階かも確認しておくと判断しやすくなります。AIスクールをおすすめしない人では、目的・作業時間・成果物の準備が整っているかを整理しています。
enumを避けてUnion型やas constを使うような型設計を学んだあと、AI活用や副業学習で有料支援を検討する場合は、AIスクールの無料相談は何社受けるべき?も確認してください。1社だけで決めず、質問対応、作れる成果物、学習の進め方、料金総額、返金条件を同じ質問で比べると、モダンな型設計の学習からどこまで支援が必要か判断しやすくなります。
開発・プログラミング記事をまとめて読む
プログラミング・開発記事まとめ
Nexforge内の学習順、環境構築、TypeScript、Rust/Gleam、Linuxトラブル対応の記事を目的別にまとめています。
TypeScriptの避けたい書き方関連記事
TypeScriptの古い書き方や避けたい型をまとめて確認したい場合は、次の記事も参考になります。
- TypeScriptで避けたい書き方まとめ|any・enum・namespaceなど
- TypeScriptでexport defaultを避ける理由|named exportの使い方
- TypeScriptでnamespaceを避ける理由|ES Modulesへの移行
- TypeScriptでthis.constructorを使う時の注意点と代替案
- TypeScriptのコンストラクタ引数public/privateの注意点
- TypeScriptでvarを避ける理由|let・constの使い分け
- TypeScriptでFunction型を避ける理由|安全な関数型の書き方
- TypeScriptでString・Number・Boolean型を避ける理由
- TypeScriptでanyを避ける理由|unknownや型定義への置き換え
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。


コメント