Materi
Data yang datang dari luar program — isi berkas, jawaban jaringan, hasil JSON.parse — belum tentu berbentuk seperti yang kamu harapkan. TypeScript menyediakan dua tipe untuk nilai yang bentuknya belum diketahui, dan keduanya berperilaku sangat berbeda.
any mematikan pemeriksaan tipe pada nilai itu: semua properti boleh dibaca, semua method boleh dipanggil, dan kompiler diam. Kesalahan baru muncul saat program berjalan, dalam bentuk pesan seperti Cannot read properties of undefined. unknown menerima nilai apa pun juga, tetapi tidak mengizinkan apa-apa sebelum tipenya dipersempit.
function f1(a: any) {
a.b(); // diterima kompiler, bisa gagal saat berjalan
}
function f2(a: unknown) {
a.b(); // ditolak: 'a' is of type 'unknown'
}
function namaProduk(data: unknown): string {
if (typeof data === "object" && data !== null && "nama" in data && typeof data.nama === "string") {
return data.nama;
}
return "tanpa nama";
}Pemeriksaan bertingkat di atas dibutuhkan karena typeof null juga menghasilkan "object". Urutannya: pastikan berbentuk objek, pastikan bukan null, pastikan propertinya ada, lalu pastikan tipe isinya. Setelah empat pemeriksaan itu, data.nama sudah dikenali sebagai string dan boleh dikembalikan.