メインコンテンツにスキップ

Flow列挙型

Flow列挙型は、独自の型を作成する固定の定数セットを定義します。

Flowの他の機能とは異なり、Flow列挙型は、型として存在するだけでなく、実行時に値として存在します。

プロジェクトでFlow列挙型を有効にする方法を読む.

利点

列挙型は、既存のパターンに比べていくつかの利点を提供します

  • 繰り返しの削減:列挙型の宣言は、列挙型の型と値の両方を提供します。
  • Flowのパフォーマンス向上:特定の状況では型チェックにコストがかかる可能性のある共用体とは異なり、列挙型は良好な型チェックパフォーマンスが保証されています。
  • 新しい機能の有効化:列挙型には、プリミティブ型から列挙型に安全に変換する`cast` メソッドが付属しています。
  • 安全性の向上:列挙型は、他の型(たとえば、`string`)と暗黙的に強制変換されない独自の型を定義し、switch文で網羅的にチェックする必要があります。これらのプロパティは、ロジックのバグを防ぐのに役立ちます。

クイックスタート

列挙型の定義

`Active`、`Paused`、`Off` の3つのメンバーを持つ `Status` という名前の列挙型。

1enum Status {2  Active,3  Paused,4  Off,5}

デフォルトでは、列挙型は、その名前を反映した文字列値を持つメンバーを定義します。値を明示的に設定することもできます

1enum Status {2  Active = 'active',3  Paused = 'paused',4  Off = 'off',5}

数値を使用することもできます

1enum Status {2  Active = 1,3  Paused = 2,4  Off = 3,5}

値は一意の、リテラルで、すべて同じ型である必要があります。詳細については、列挙型の定義に関する完全なドキュメントをご覧ください。

列挙型の使用

列挙型のメンバーにアクセスするには、ドットアクセスを使用します

Status.Active

列挙型を注釈として使用するには、列挙型名を使用します

const status: Status = Status.Active;

表現型(この場合は `string`)から列挙型にキャストします

const status: Status | void = Status.cast(someString);

`??` 演算子を使用して、デフォルト値を簡単に指定できます

const status: Status = Status.cast(someString) ?? Status.Off;

`isValid`、`members`、`getName` など、列挙型が提供する他のメソッドの詳細をご覧ください。

列挙型をその表現型にキャストします(明示的に行う必要があります)

status as string

`switch` 文での列挙型のチェックは網羅的です - すべてのメンバーをチェックすることを確認します

1enum Status {2  Active,3  Paused,4  Off,5}6const status: Status = Status.Active;7
8// ERROR: Incomplete exhaustive check9switch (status) {
10 case Status.Active: break;11 case Status.Paused: break;12 // We forgot to add `case: Status.Off:` here, resulting in error above.13 // Using `default:` would also work to check all remaining members.14}
9:9-9:14: Incomplete exhaustive check: the member `Off` of enum `Status` [1] has not been considered in check of `status`. [invalid-exhaustive-check]

列挙型の網羅的なチェックの詳細をご覧ください。

詳細については、列挙型の使用に関する完全なドキュメントをご覧ください。

Flow列挙型を使用する場合

以前にリテラルの共用体型を定義した場合、代わりに列挙型を使用してその型を定義できます。次のようにする代わりに

1type Status =2  | 'Active'3  | 'Paused'4  | 'Off';5
6const x: Status = 'Active';

または

1const Status = Object.freeze({2  Active: 'Active',3  Paused: 'Paused',4  Off: 'Off',5});6type StatusType = $Keys<typeof Status>;7const x: StatusType = Status.Active;

次のように使用できます

1enum Status {2  Active,3  Paused,4  Off,5}6const x: Status = Status.Active;

従来のJavaScript列挙型パターンをFlow列挙型に移行する方法の詳細については、従来のパターンからの移行を参照してください。

Flow列挙型を使用しない場合

列挙型は、多くのユースケースをカバーし、特定の利点を持つように設計されています。この設計により、さまざまなトレードオフが行われ、特定の状況では、これらのトレードオフが適切でない場合があります。そのような場合は、既存のパターンを引き続き使用して、ユースケースに対応できます。そのような状況の詳細を読む