Day 3・ユニオン・絞り込み・ジェネリクス(読める範囲で)
ユニオン型(A | B)とリテラル型
「AかBのどちらか」を表すユニオン型と、値そのものを型にするリテラル型を学ぶ。
「どちらか」を型で表す
現実のデータは「文字列のときもあれば数値のときもある」「3つの状態のどれか」といった形をよく取ります。こういう「AかBのどちらか」を1つの型で表すのがユニオン型です。書き方は縦棒 | でつなぐだけで、 と呼びます。
// id は「文字列」または「数値」のどちらか
let id: string | number;
id = "abc123"; // OK
id = 42; // OK
id = true; // エラー: boolean は string でも number でもないさらに強力なのがリテラル型です。ふつう型は string のように「文字列全般」を表しますが、リテラル型は "success" のように「その値そのもの」を型にします。これをユニオンと組み合わせると「決まった選択肢のどれか」を表現できます。
// status は「この3つの文字列のどれか」しか受け付けない
type Status = "idle" | "loading" | "done";
let s: Status = "loading"; // OK
s = "done"; // OK
s = "finished"; // エラー: 3つの選択肢に無いなぜリテラル型が便利なのか
AIに状態管理のコードを書かせると、"loading" のつもりで "Loading" や "loding" と綴りがブレることがあります。リテラル型で選択肢を固定しておくと、こうしたタイプミスをその場で赤線として検出でき、実行する前に気づけます。
型が広すぎる
string にすると何でも入り、綴りミスを見逃す
let status: string = "lodaing"; // ミスに気づけない選択肢を固定
リテラル型なら許されない値は即エラー
type Status = "idle" | "loading" | "done";
let status: Status = "lodaing"; // エラーで即発覚- ユニオン型: A | B と書き「AかBのどちらか」を表す
- リテラル型: "success" や 200 のように「値そのもの」を型にする
- 両者を組み合わせると「決まった選択肢のどれか」を安全に表現できる
AIにはこう聞く
「このボタンの状態は idle / loading / done の3つだけ。これをリテラル型のユニオンで表して、状態に応じて表示を切り替えるコードを書いて」と伝えると、選択肢が固定された安全なコードが返ってきます。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
type Result = "ok" | "error"; と定義したとき、代入できないものはどれ?
ユニオン型 string | number の変数に対して、安全に代入できる値はどれ?
リテラル型のユニオン(例: "idle" | "loading" | "done")を使うと、なぜバグを早く見つけられるのか説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。