enum は名前付き定数の集合を定義します。TypeScript には数値 enum と文字列 enum があります。
ts
{ , , , }
.;
[];
{
= ,
= ,
}
.;
enum は名前付き定数の集合を定義します。TypeScript には数値 enum と文字列 enum があります。
{ , , , }
.;
[];
{
= ,
= ,
}
.;
(コンパイル時に消える)ほとんどの TypeScript の型とは異なり、通常の enum は JavaScript のオブジェクトをバンドルに出力します。これが、多くのチームが純粋に型レベルである 文字列リテラルの union に as const を加えたものを好む理由です。
// often preferred — zero runtime cost, easy to read in logs
const Status = { Active: "ACTIVE", Inactive: "INACTIVE" } as const;
type Status = typeof Status[keyof typeof Status]; // "ACTIVE" | "INACTIVE"
// or simply:
type Direction = "up" | "down" | "left" | "right";
const enum E { A, B } // inlined at compile time — no runtime object, but has tooling caveats
enum は固定された集合(状態、ロール、方向)に意味のある名前を与え、それらを 1 つの名前空間の下にまとめます。
しかし、enum はランタイムコードを出力し、いくつかの癖(数値 enum は緩くチェックされる)があるため、現代の TypeScript では単純なケースに対して 文字列リテラルの union がしばしば好まれます。これらはより軽量で、自然にシリアライズされます。
名前空間や reverse mapping が欲しいときには enum を使ってください。