Union (A | B) znamená "buď A nebo B." Intersection (A & B) znamená "jak A tak B zároveň."
ts
= | | ;
: = ;
() { }
Union (A | B) znamená "buď A nebo B." Intersection (A & B) znamená "jak A tak B zároveň."
= | | ;
: = ;
() { }
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
}
Dokud nezúžíte union, můžete přistupovat pouze ke členům, které jsou přítomny na každém členu union — kompilátor vás chrání.
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 jsou skvělé pro skládání/míšení typů objektů (např. přidání vlastností do existujícího typu).
Union modelují "jednu z několika možností" — základ bezpečného modelování stavu (např. diskriminované union pro stav reduceru), přetížení funkcí a nullable typy (T | null).
Intersection skládají typy dohromady.
Dohromady dělají Typescriptový systém typů dost expressivní na to, aby přesně odrážel reálná data.