En union (A | B) betyder "antingen A eller B." En intersection (A & B) betyder "både A och B samtidigt."
ts
= | | ;
: = ;
() { }
En union (A | B) betyder "antingen A eller B." En intersection (A & B) betyder "både A och B samtidigt."
= | | ;
: = ;
() { }
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
}
Tills du snävar in en union, kan du bara komma åt medlemmar som finns på varje medlem av unionen — kompilatorn skyddar 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
Intersections är bra för att komponera/blanda objekttyper (t.ex. lägga till props till en befintlig typ).
Unioner modellerar "ett av flera möjligheter" — grunden för säker tillståndsmodellering (t.ex. diskriminerade unioner för reduceartillstånd), funktionsöverbelastningar och nullable-typer (T | null).
Intersections komponerar typerna tillsammans.
Tillsammans gör de TypeScripts typsystem uttrycksfull nog att spegla verkliga data exakt.