本文へスキップ
BecomeCoder

TypeScriptコース · 第2章 関数に型をつける · レッスン7

ユニオン型 ― 複数の型を許す

ブラウザで完結

導入

文字列または数値」のように、複数の型のどれかを受け付けたいときはユニオン型を使います。型を |(パイプ)でつなげて書きます。

説明

string | number は「文字列か数値のどちらか」という意味です。

function showId(id: string | number): void {
  console.log("ID:", id);
}
showId(123);
showId("A-45");

ユニオン型の値を使うときは、typeof などでどちらの型か確かめてからその型ならではの操作をします(型の絞り込み)。

function format(value: string | number): string {
  if (typeof value === "number") {
    return value.toFixed(2);   // number のときだけ toFixed が使える
  }
  return value.toUpperCase();  // ここでは string に絞り込まれている
}
console.log(format(3.1));   // 3.10
console.log(format("ok"));  // OK

決まった文字列だけを許す "asc" | "desc" のようなユニオンもよく使います。

やってみよう

format(10)format("hello") を実行して、数値と文字列で処理が分かれることを確かめましょう。

演習

double という関数を作ってください。引数 x: number | string を受け取り、number なら x * 2 を、string なら x + x(連結)を返します。double(4) の結果を console.log() で表示しましょう。

ヒント1を見る

if (typeof x === "number") { return x * 2; } return x + x; のように型で分岐します。

実際に動かしてみよう

下のエディタにTypeScriptを書いて「実行」を押すと、その場でJavaScriptに変換してブラウザ内で実行し、出力が表示されます。本文の例をそのまま試したり、型注釈を書き換えたりしてみましょう(console.log の結果が下に出ます。初回だけコンパイラの読み込みに少し時間がかかります)。

TypeScript — ブラウザ内で実行

TypeScriptコンパイラ(同梱)でTS→JSに変換してから実行する学習用環境を読み込みます(初回のみコンパイラの読み込みに少し時間がかかります)。
スクロールして表示された時点でも自動で読み込まれます。