union(A | B)は「A または B のいずれか」を意味します。intersection(A & B)は「A と B の両方を同時に」を意味します。
ts
= | | ;
: = ;
() { }
union(A | B)は「A または B のいずれか」を意味します。intersection(A & B)は「A と B の両方を同時に」を意味します。
= | | ;
: = ;
() { }
function format(x: string | number) {
// x.toFixed(2); // ❌ toFixed doesn't exist on string
if (typeof x === "number") return x.toFixed(2); // ✅ narrowed to number
return x.toUpperCase(); // ✅ here it's a string
}
union を narrowing するまでは、union の すべての メンバーに存在するメンバーにしかアクセスできません。コンパイラがあなたを守ります。
type Name = { name: string };
type Age = { age: number };
type Person = Name & Age; // must have BOTH name and age
const p: Person = { name: "Ann", age: 30 }; // both required
intersection は、オブジェクト型を合成/ミックスするのに最適です(例: 既存の型へのプロパティの追加)。
union は「複数の可能性のうちの 1 つ」をモデル化します。これは安全な状態モデリング(例: reducer の状態のための discriminated union)、関数のオーバーロード、null 許容の型(T | null)の基盤です。
intersection は型を一緒に合成します。
これらを合わせることで、TypeScript の型システムは実際のデータを正確に映し出せるほど表現力豊かになります。