En union (A | B) betyder "enten A eller B." En intersection (A & B) betyder "både A og B på samme tid."
ts
= | | ;
: = ;
() { }
En union (A | B) betyder "enten A eller B." En intersection (A & B) betyder "både A og B på samme tid."
= | | ;
: = ;
() { }
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
}
Dokumenter du indsnævrer en union, kan du kun få adgang til medlemmer, der er til stede på hvert medlem af unionen — compileren beskytter dig.
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 er fantastisk til at komponere/blande objekttyper (f.eks. tilføj props til en eksisterende type).
Union modellerer "en af flere muligheder" — grundlaget for sikkert tilstandsmodellering (f.eks. diskriminerede unions til reducer-tilstand), funktionsoverloadinger og nullable typer (T | null).
Intersection samler typer sammen.
Tilsammen gør de Typescripts typesystem udtryksfuldt nok til præcist at afspejle rigtige data.