複数の方のうちのいずれかをとる値を表現できる
型1 | 型2 | ... の形式で定義できる
let value: boolean | number;
value = true; // OK
value = 100; // OK
共通のリテラル型のプロパティを持つ特別なユニオン型
共通のプロパティを利用して、型を判別することができる
type Triangle = { kind: "triangle"; base: number; height: number };
type Rectangle = { kind: "rectangle"; width: number; height: number };
type Shape = Triangle | Rectangle;
function getArea(shape: Shape): number {
// 共通のプロパティkindを使って型を判定
switch (shape.kind) {
case "triangle":
// 仮引数shapeはTriangle型であると判定される
return (shape.base * shape.height) / 2;
case "rectangle":
// 仮引数shapeはRectangle型であると判定される
return shape.width * shape.height;
}
}