A union (A | B) reiškia "arba A arba B." An intersection (A & B) reiškia "tiek A ir B vienu metu."
ts
= | | ;
: = ;
() { }
A union (A | B) reiškia "arba A arba B." An intersection (A & B) reiškia "tiek A ir B vienu metu."
= | | ;
: = ;
() { }
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
}
Kol jūs neapribojate narrow union tipo, galite pasiekti tik narius, kurie egzistuoja kiekvieno union tipo nario — kompiliatorius jus saugo.
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 tipai puikus objekto tipų sudėtinimui/mišimui (pvz., pridėjus props prie esamo tipo).
Union tipai modeliuoja "vieną iš kelių galimybių" — saugaus būsenos modeliavimo pagrindą (pvz., discriminated unions reducerio būsenai), funkcijų perrašus ir nullable tipus (T | null).
Intersection tipai sujungia tipus kartu.
Kartu jie daro TypeScript tipo sistemą pakankamai išraiškingą, kad tiksliai atspindėtų tikrus duomenis.