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設計には欠かせない機能ですが、その分、開発者には「型を正しく絞り込む」という責任が伴います。