Study
TypeScript

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.

Editor Latihan

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.