Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

タグ付きユニオン型を便利に使うテクニックとその注意点

Avatar for uhyo uhyo
November 28, 2025

 タグ付きユニオン型を便利に使うテクニックとその注意点

2025-11-28 プロによる本気の攻略本『JavaScript/TypeScript実力強化書』 - Forkwell Library #115

Avatar for uhyo

uhyo

November 28, 2025
Tweet

More Decks by uhyo

Other Decks in Technology

Transcript

  1. タグ付きユニオンの例 type Success<T> = { success: true; value: T };

    type Failure<E> = { success: false; error: E }; type Result<T, E> = Success<T> | Failure<E>; Result型の値rに対しては、r.successがtrueか falseかを見ればどちらの型なのか判別できる。 5
  2. 不便な点 絶対にsuccessをチェックしないとresultやerrorに アクセスできない。 7 // これはOK if (r.success) { console.log(r.value);

    } // これはだめ const { success, value } = r; if (success) { console.log(value); } successをチェックする前はvalue が存在するかどうか確定していない ので、アクセス不可
  3. 不便な点を解消するテクニック type Success<T> = { success: true; value: T; error?:

    never }; type Failure<E> = { success: false; error: E; value?: never }; type Result<T, E> = Success<T> | Failure<E>; 8
  4. 具体例による比較 type Success<T> = { success: true; value: T };

    { success: true, value: 123 } ←OK { success: true, value: 123 , error: “aaa” } ←これもOK 11
  5. 具体例による比較 type Success<T> = { success: true; value: T; error?:

    never }; { success: true, value: 123 } ←OK { success: true, value: 123 , error: “aaa” } ←これはエラー 12
  6. ?: neverの欠点 タグ付きユニオン型の絞り込みの方法が曖昧に なってしまうこと。 17 // 望ましい方法 if (r.success) {

    console.log(r.value); } // こんなやり方もできてしまう if (r.value !== undefined) { console.log(r.value); }