Materi
Pada nilai bertipe union, TypeScript belum mengizinkan operasi yang hanya ada di salah satu anggotanya. Memanggil nilai.length pada string | number ditolak dengan pesan Property 'length' does not exist on type 'string | number'. Pemeriksaan typeof di dalam if membuat kompiler menyempitkan tipenya di dalam blok tersebut.
function panjangNilai(nilai: string | number): number {
if (typeof nilai === "string") {
return nilai.length; // di sini nilai pasti string
}
return nilai; // di sini nilai pasti number
}Setelah blok if yang memeriksa string, TypeScript tahu satu-satunya kemungkinan yang tersisa adalah number, sehingga nilai boleh dikembalikan langsung sebagai angka. Penyempitan semacam ini bekerja juga pada else, pada return lebih awal, dan pada pemeriksaan berantai.
typeof di TypeScript adalah operator JavaScript yang sama, jadi hasilnya tetap teks seperti "string", "number", "boolean", "object", dan "function". Dua jebakan JavaScript ikut terbawa: typeof null menghasilkan "object", dan typeof array juga "object", sehingga keduanya perlu pemeriksaan tambahan. Untuk array, pemeriksaan itu adalah Array.isArray(nilai), yang juga dikenali kompiler sebagai penyempit: pada string | string[], cabang yang lolos Array.isArray dianggap string[].