A union (A | B) bermakna "sama ada A atau B." An intersection (A & B) bermakna "kedua-dua A dan B sekaligus."
ts
= | | ;
: = ;
() { }
A union (A | B) bermakna "sama ada A atau B." An intersection (A & B) bermakna "kedua-dua A dan B sekaligus."
= | | ;
: = ;
() { }
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
}
Sehingga anda narrow sebuah union, anda hanya boleh mengakses ahli yang ada pada setiap ahli union — pengkompil melindungi anda.
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 bagus untuk menggubah/menggabungkan jenis objek (cth. menambahkan props kepada jenis yang ada).
Union memodelkan "salah satu daripada beberapa kemungkinan" — asas pemodelan keadaan yang selamat (cth. union yang dibezakan untuk keadaan reducer), overload fungsi, dan jenis boleh nol (T | null).
Intersection menggabungkan jenis bersama-sama.
Bersama-sama mereka menjadikan sistem jenis TypeScript cukup ekspresif untuk mencerminkan data sebenarnya dengan tepat.