En union (A | B) betyr "enten A eller B." En intersection (A & B) betyr "både A og B samtidig."
= | | ;
: = ;
() { }
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
}
Inntil du snevrer inn en union, kan du bare få tilgang til medlemmer som finnes på alle medlemmer av unionen — kompilatoren beskytter deg.
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 er flotte for å komponere/blande objekttyper (f.eks. legge til props til en eksisterende type).
Unions modellerer "en av flere muligheter" — grunnlaget for sikker tilstandsmodellering (f.eks. diskriminerte unions for reducer-tilstand), funksjonsoverbelastninger og nullable-typer (T | null).
Intersections komponerer typer sammen.
Tilsammen gjør de TypeScripts typesystem uttrykksfullt nok til å gjenspeile reelle data presist.