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, вы можете получить доступ только к членам, присутствующим на каждом члене 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
Intersections отлично подходят для композиции/смешивания объектных типов (например, добавление props к существующему типу).
Unions моделируют «один из нескольких вариантов» — основу безопасного моделирования состояния (например, discriminated unions для reducer state), перегрузку функций и nullable типы (T | null).
Intersections объединяют типы вместе.
Вместе они делают систему типов TypeScript достаточно выразительной, чтобы точно отражать реальные данные.