Ryzenの内蔵グラフィックス性能比較|もはやグラボいらない!?
TypeScriptのenumが非推奨となっていた件
こんにちは!今回は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の代わりにここで紹介した方法を使ってみてください。より良いコードが書けるはずです。
- Ryzenの内蔵グラフィックス性能比較|もはやグラボいらない!?
- 内蔵GPUのRadeon 680M,760MでCS:GO2は動く?|AMD Ryzen 7 6850Hの実力を検証!
- 内蔵GPUのRadeon 680M,760MでCOD BO6は動く?|AMD Ryzen 7 6850Hの実力を検証!
- 内蔵GPUのRadeon 680M,760MでVALORANTは動く?|AMD Ryzen 7 6850Hの実力を検証!
- 内蔵GPUのRadeon 680M,760MでAPEXは動く?|AMD Ryzen 7 6850Hの実力を検証!
- >内臓GPU基準< ミニPCのコスパ順ランキング!
- TypeScriptで非推奨になっている機能一覧
- TypeScriptのexport defaultが非推奨となっていた件
- TypeScriptのNamespaceが非推奨となっていた件
- TypeScriptのthis.constructorが非推奨となっていた件
- TypeScriptのコンストラクタ引数でのpublic/privateが非推奨となっていた件
- TypeScriptのvarキーワードが非推奨となっていた件
- TypeScriptのFunction型が非推奨となっていた件
- TypeScriptのString, Number, Boolean型が非推奨となっていた件
- TypeScriptのanyが非推奨となっていた件
- TypeScriptのenumが非推奨となっていた件
- 内蔵GPUのメモリ割り当てを増やす方法【2024年版】
- ウォーターフォールは間違っている!私がアジャイル開発をエンジニアに勧める理由
- IT業界の酷い下請け構造は誰のせいなのか
- IT業界の下請け構造が酷すぎる!!
- クラウディアと他のクラウドソーシングサービスの比較
- Zigプログラミング言語とは?RustやC++との違いを解説
- めっちゃ早いPython?Nimというプログラミング言語について
- Rubyの静的型付け版?Crystalってどんな言語なのか解説
- Elixirは開発しづらい?Gleamへ移行しよう – 開発体験が劇的に改善
- Gleamの基本的な構文とデータ型
- Gleamの環境構築方法[Linux]
- Gleam言語でのWebアプリ開発ロードマップ
- MacBook Pro M1の外部ディスプレイちらつき現象について
- MacBook Air M2で4K60Hz外部ディスプレイを使用する方法
- Ryzen 7040HS Phoenix搭載LinuxマシンのGPUドライバー設定ガイド
- 注目を集める新星Gleam言語!Elixirとの違いから見る特徴と可能性
- DellとHP、買うならどっちがマシ?徹底比較ガイド
- サブドメインのメリット・デメリットを徹底解説!
- 中古ドメインって実際どうなの?メリット・デメリットを解説
- ノートパソコン バッテリー持ち ランキング【2024年4月】徹底比較!
- なぜ安い?workドメインが安価な理由を徹底解説!
- メキシコペソ投資ってどうなの?過去データで見る特徴とリスク
- なぜ私がトルコリラ投資をおすすめしないのか – データで見る実態と注意点
- 【2024年4月最新】世界の通貨別金利ランキング!今一番利回りが高い通貨はコレだ!
- 金利5%台!?米ドル保有で高金利を受け取る方法
- axumのルーティングを整理して別ファイルに分ける方法
- Acitx-webとAxumってどっちがいいの?RustのWebフレームワーク比較
- 次期C#?注目のプログラミング言語F#を徹底解説
- 電気ストーブと石油ストーブはどっちがいい?費用や特徴を徹底比較!
- ゲーミングキーボードって正直あんまり変わらないよねって話
- 【2024年版】今後はやるマイナープログラミング言語5選|現役エンジニアが解説
- Rustの現状の課題と発展途上な部分
- 私がRustがC++より優れていると感じる理由
- Rustプログラミング言語完全学習ロードマップ【2024年版】