A union (A | B) znači "A ili B." An intersection (A & B) znači "A i B istovremeno."
ts
= | | ;
: = ;
() { }
A union (A | B) znači "A ili B." An intersection (A & B) znači "A i B istovremeno."
= | | ;
: = ;
() { }
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
}
Dok ne suzite union, možete pristupiti samo članovima koji su prisutni na svakom članu uniona — kompajler vas štiti.
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
Intersectioni su odličan za sastavljanje/miješanje tipova objekata (npr. dodavanje props-a postojećem tipu).
Unioni modeliraju "jedan od nekoliko mogućnosti" — temelj sigurnog modeliranja stanja (npr. razlikovani unionimi za reducer stanje), preopterećenja funkcija i nullable tipove (T | null).
Intersectioni kombiniraju tipove zajedno.
Zajedno čine TypeScript-ov sustav tipova dovoljno izražajnim da precizno preslika stvarne podatke.