フローでの列挙型の使用
提供:Dev Guides
従来のオブジェクト指向言語(C、C#、Java)に触れたことがある場合は、おそらく列挙型のデータ型を見たことがあるでしょう。 JavaScriptは列挙型をサポートしていませんが、Flowのタイプチェックはそれを補うことができます。
列挙はどこで役に立ちますか?
ポーカーチップを扱うプログラムを書いているとしましょう。 チップの色はひもです(すなわち 「赤」、「青」など)。 したがって、Chip
タイプは次のようになります。
type Chip = { color: string, };
…そしてチップを作成する関数は次のようになります。
function createChip(color: string): Chip { return { color, }; }
ただし、有効な色のみを使用していることを確認する必要があります。
// This should be valid. createChip('red'); // This should not. createChip('cyan'); // This isn't even a color. createChip('Nicomachean Ethics');
列挙型の作成
列挙型を定義する最も簡単な方法は、文字列リテラルの和集合としてです。
// 'red', 'blue', and 'green' are valid colors. type Color = 'red' | 'blue' | 'green';
ここから、string
の代わりにタイプColor
を使用できます。
type Chip = { // `color` can only be a valid color. color: Color, }; // `createChip` only takes values of type `Color`. function createChip(color: Color): Chip { return { color, }; }
既存の値から列挙型を作成する
ポーカーチップは色によって価値があります。 したがって、プロジェクトのどこかに値を検索するオブジェクトがあるとしましょう。
const chipValues = { red: 5, blue: 10, green: 25, };
Color
タイプはchipValues
のキーを繰り返しています。3つしかない場合はそれほど悪くはありませんが、それでも重複しているため、さらに追加すると煩わしくなります。 フローは、$Keys
タイプのオブジェクトのキーから列挙型を導出する方法を提供します。
type Color = $Keys<typeof chipValues>;