Type Assertion & unknown vs any
Penjelasan
Type assertion (as Tipe) memberi tahu compiler "percayalah, saya tahu ini pasti bertipe X" tanpa pengecekan runtime sungguhan — dipakai kalau kamu yakin lebih tahu dari compiler, tapi berisiko kalau salah. unknown mirip any (bisa diisi nilai apa saja), TAPI beda krusial: nilai bertipe unknown TIDAK BISA langsung dipakai/dipanggil method-nya sebelum di-narrow atau di-assert dulu — jauh lebih aman dibanding any.
Contoh Konsep
let dataApi: unknown = JSON.parse('{"nama":"Budi"}');
// console.log(dataApi.nama); // Error! unknown belum di-narrow
if (typeof dataApi === "object" && dataApi !== null && "nama" in dataApi) {
console.log((dataApi as { nama: string }).nama); // aman setelah narrowing + assertion
}
let dataBebas: any = JSON.parse('{"nama":"Budi"}');
console.log(dataBebas.nama); // "aman" secara compiler, tapi bisa crash runtime kalau salah struktur
Praktikum
Buat variabel let input: unknown diisi angka bebas. Cek dengan typeof apakah input berupa number, kalau iya lakukan type assertion (as number) dan kalikan dengan 2, lalu tampilkan hasilnya.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Selalu pilih unknown daripada any untuk data yang sumbernya tidak terpercaya (mis. hasil JSON.parse() dari API eksternal) — unknown MEMAKSA kamu memvalidasi bentuk datanya dulu sebelum dipakai, sedangkan any membiarkan bug lolos sampai runtime.