TypeScript 速習チュートリアル

TypeScript ユニオン型

ユニオン型(Union Types)は、値が単一の型ではなく、複数の型のいずれかになり得る場合に使用されます。
例えば、あるプロパティが string または number のどちらかとして扱われる状況などがこれに該当します。

1. ユニオン型 | (OR)

パイプ記号 | を使用することで、「このパラメータは string または number である」といった宣言が可能になります。

function printStatusCode(code: string | number) {
  console.log(`ステータスコードは ${code} です。`)
}

printStatusCode(404);    // 数値として渡す
printStatusCode('404');  // 文字列として渡す

2. ユニオン型におけるエラー (Union Type Errors)

注意: ユニオン型を使用する場合、型エラーを避けるために「現在どの型として扱われているか」を把握する必要があります。

例:エラーが発生するケース

function printStatusCode(code: string | number) {
  // エラー: プロパティ 'toUpperCase' は型 'string | number' に存在しません。
  // プロパティ 'toUpperCase' は型 'number' には存在しません。
  console.log(`ステータスコード: ${code.toUpperCase()}`)
}

この例では、toUpperCase() を呼び出そうとして問題が発生しています。なぜなら、toUpperCase()string 型のメソッドであり、number 型にはアクセス権がない(メソッドが存在しない)ためです。

ユニオン型を安全に扱うには、通常 「型ガード(Type Guards)」 を使用して、実行時に型を絞り込む(Narrowing)処理が必要になります。

ユニオン型は、柔軟なAPI設計には欠かせない機能ですが、その分、開発者には「型を正しく絞り込む」という責任が伴います。