Unija (A | B) pomeni »bodisi A ali B.« Presek (A & B) pomeni »tako A kot tudi B hkrati.«
ts
= | | ;
: = ;
() { }
Unija (A | B) pomeni »bodisi A ali B.« Presek (A & B) pomeni »tako A kot tudi B hkrati.«
= | | ;
: = ;
() { }
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
}
Dokler unijo ne zožite, lahko dostopate le do članov, ki so prisotni na vsakem članu unije — prevajalnik vas varuje.
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
Preseki so odlični za sestavljanje/mešanje tipov objektov (na primer dodajanje svojstev obstoječem tipu).
Unije modelirajo »eno od več možnosti« — temelj varnega modeliranja stanja (na primer diskriminirane unije za stanje reduktorja), preopteretitve funkcij in ničelne vrste (T | null).
Preseki sestavljajo vrste skupaj.
Skupaj naredijo sistem tipov TypeScript dovolj izrazit, da natančno odslikava resnične podatke.