Lompat ke konten Lompat ke sidebar Lompat ke footer

Widget HTML #1

Membedah any vs unknown di TypeScript: Pertarungan Dua Tipe Generik

perbedaan any dan unknown di typescript, ts

Pernah gak sih kita ngerasa bingung saat disodorin dua pilihan yang kayaknya mirip tapi kok beda? Nah, kalau kita main-main di dunia TypeScript, salah satu dilema yang sering bikin nggaruk-garuk kepala adalah memilih antara any dan unknown. Keduanya sering muncul saat kita gak tahu pasti tipe datanya, tapi percayalah, mereka punya kepribadian yang beda banget. Yuk, kita bedah biar gak salah langkah!

Kenalan Dulu: Apa itu any dan unknown?

  • any

    Ini si bebas banget. Kita bisa kasih nilai apa pun ke any, terus diperlakukan semau kita. Sounds fun? Tapi hati-hati, kebebasan ini bisa jadi jebakan batman.

  • unknow

    Kalau any itu si bebas, unknown adalah si kalem dan penuh aturan. Dia juga bisa menampung apa aja, tapi kita gak bisa sembarangan memperlakukan datanya sebelum kita pastikan tipe sebenarnya. Lebih hati-hati, tapi juga lebih aman.

Contoh Kasus: Pakai any atau unknown?

Kasus 1: Kita lagi bikin fungsi yang bisa menerima tipe apa pun, misalnya data dari API.

function handleData(data: any) {
  console.log(data.toUpperCase()); // Bisa aja langsung dipanggil, tapi... yakin datanya string?
}

handleData(42); // 😭 Runtime error: "data.toUpperCase is not a function"

Solusi dengan unknown:

function handleData(data: unknown) {
  if (typeof data === "string") {
    console.log(data.toUpperCase()); // Aman karena kita cek dulu tipe datanya.
  } else {
    console.log("Data bukan string, jadi gak bisa diolah pakai toUpperCase.");
  }
}

handleData(42); // "Data bukan string, jadi gak bisa diolah pakai toUpperCase."

Kasus 2: Kita lagi debugging fungsi yang menerima data "gak jelas."

function debugData(data: any) {
  console.log(data.property.doesNotExist); // `any` bakal lolos di compile-time, tapi runtime? Error deh!
}

debugData({ someProperty: 123 }); // 😱 Error saat dijalankan.

Solusi dengan unknown:

function debugData(data: unknown) {
  if (typeof data === "object" && data !== null && "property" in data) {
    console.log((data as any).property.doesNotExist); // Lebih aman, meskipun tetap butuh pengecekan tambahan.
  } else {
    console.log("Data gak sesuai ekspektasi.");
  }
}

Pro dan Kontra

Aspekanyunknown
FleksibilitasSangat fleksibel, bisa menerima dan digunakan dengan bebas.Fleksibel untuk menerima tipe apa saja, tapi harus divalidasi dulu sebelum digunakan.
KeamananTidak aman, compile-time tidak mendeteksi kesalahan tipe.Aman, karena membutuhkan validasi tipe sebelum digunakan.
ProduktivitasCepat untuk prototipe dan debugging.Memakan waktu lebih banyak karena butuh validasi tambahan.
Runtime ErrorRentan runtime error karena tidak ada pengecekan tipe.Minim runtime error karena tipe harus dicek lebih dulu.
KompleksitasMudah digunakan, tidak perlu validasi tambahan.Lebih kompleks, membutuhkan pengecekan tipe sebelum akses data.
Penggunaan di ProduksiKurang cocok, sulit dilacak jika ada bug.Cocok untuk kode produksi karena lebih terstruktur dan aman.

Jadi, Mana yang Lebih Baik?

Simpel aja, kita bisa anggap any itu seperti pintu tanpa kunci yang siapa pun bisa buka (termasuk bug 🐞). Sementara, unknown adalah pintu dengan kunci kombinasi, sedikit ribet tapi jelas lebih aman.

Rekomendasi:

  • Gunakan unknown kalau kita peduli soal keamanan tipe dan kode kita bakal lama dipakai.
  • Pakai any hanya kalau kita lagi buru-buru bikin prototipe atau debugging cepat. Tapi jangan lupa, kode prototipe juga perlu dibersihkan nanti!

Penutup: Tipe Data yang Cocok untuk Kita

Bayangin aja any itu teman yang bilang, "Santai aja, apa pun boleh!" Tapi ujung-ujungnya bikin kita kecele. Sementara unknown adalah teman bijak yang bilang, "Tunggu sebentar, pastikan dulu sebelum bertindak." Pilihan ada di tangan kita, mau santai tapi risiko tinggi, atau ribet dikit tapi lebih aman.

Gimana? Sudah siap bikin keputusan yang bijak soal any dan unknown? Kalau masih bingung, santai aja, namanya juga belajar. TypeScript emang suka ngajarin kita buat gak sembarangan—kayak kode, kayak hidup, semuanya butuh validasi. 😄

1 komentar untuk "Membedah any vs unknown di TypeScript: Pertarungan Dua Tipe Generik"