prefer-union-over-enum
enum および const enum の宣言は禁止されています。代わりにUnion型を使用してください。
チェック対象
enum Name { ... } または const enum Name { ... } の宣言。
理由
TypeScript の enum には、共用型では完全に回避できるいくつかの欠点があります。
- ランタイム コード。 通常の
enumは、逆マッピング オブジェクトを作成する IIFE にコンパイルされます。これは、ツリーシェイカーにとってデッド コードであり、バンドルごとに余分なバイトが発生します。 - 暗黙的な数値マッピング。
enum Direction { Up, Down }は、暗黙的に0と1を割り当てます。Directionが期待される場所に任意の数値を渡しても、型エラーになるのはごくまれです。 - インポートのオーバーヘッド。 列挙型は型のインポートに加えて値のインポートも必要とするため、バレルファイルや型のみのインポートが複雑になります。
共用型はコンパイル時に完全に消去され、as const オブジェクトと自然に連携して、網羅的なマップを作成できます。
例
✗ 誤り
✓ 正しい
コンシューマーは必要なものだけをインポートします。
例外
なし。このコードベースでは enum は決して適切な選択肢ではありません。

