๐Ÿง  Perbedaan never, undefined, null, unknown, dan any di TypeScript

Ariska HidayatAriska Hidayat
3 min read

Dalam TypeScript, kita sering menemukan berbagai tipe data khusus yang sekilas mirip, tapi ternyata beda peran dan makna. Artikel ini akan membahas 5 di antaranya: never, undefined, null, unknown, dan any.


๐Ÿ“Œ 1. undefined: Tidak Diberi Nilai

Penjelasan:

undefined muncul saat sesuatu belum diberi nilai.

Contoh:

let x: number | undefined;

console.log(x); // undefined

Atau pada return function tanpa return:

function doSomething(): void {}
console.log(doSomething()); // undefined

Kapan pakai?

  • Saat properti atau variabel bisa belum diisi.

  • Saat opsional: function (x?: number) โ†’ x bisa undefined.


๐Ÿ“Œ 2. null: Nilai Kosong yang Disengaja

Penjelasan:

null artinya nilai kosong dengan sengaja, bukan lupa mengisi.

Contoh:

let user: string | null = null;

Perbandingan:

let a;           // undefined
let b = null;    // null

๐Ÿ“Œ 3. any: Bebas Merdeka (Berbahaya)

Penjelasan:

any artinya bebas isi apa saja. TypeScript menyerah, tidak mengecek tipe.

Contoh:

let data: any = "text";
data = 123;
data = true;

Bahaya:

data.toUpperCase(); // OK saat compile, tapi bisa error saat runtime!

โ— Hindari any kecuali kamu sangat yakin.


๐Ÿ“Œ 4. unknown: Bebas Tapi Harus Diperiksa Dulu

Penjelasan:

unknown mirip any, tapi tidak bisa langsung digunakan tanpa pemeriksaan tipe dulu.

Contoh:

let input: unknown = "hello";

// input.toUpperCase(); โŒ Error

if (typeof input === "string") {
  console.log(input.toUpperCase()); // โœ… Aman
}

โœ… Gunakan unknown saat menerima data eksternal (API, JSON.parse, dll).


๐Ÿ“Œ 5. never: Tidak Akan Pernah Terjadi

Penjelasan:

never artinya fungsi/tindakan tidak pernah menghasilkan nilai โ€” biasanya karena:

  1. Throw error

  2. Loop tak berujung

  3. Exhaustiveness checking

Contoh:

function crash(): never {
  throw new Error("Boom!");
}

Atau:

function infinite(): never {
  while (true) {}
}

Atau:

type Shape = "circle" | "square";
function draw(s: Shape) {
  if (s === "circle") return;
  if (s === "square") return;

  const neverValue: never = s; // ๐Ÿ‘ˆ Aman karena semua case tertangani
}

๐Ÿ” Ringkasan Tabel

TipeArtiContohCatatan Penggunaan
undefinedBelum diisi`let a: numberundefined`
nullKosong disengaja`let a: stringnull`
anyBebas tanpa kontrollet x: any = 42Hindari kecuali sangat terpaksa
unknownBebas, tapi harus diperiksalet x: unknown; if (typeof x === "string")Lebih aman daripada any
neverTidak mungkin terjadithrow new Error(), while(true)Untuk kasus ekstrem / exhaustiveness check

๐ŸŽ“ Tips Mengajar Santri:

  • Gunakan analogi:

    • undefined: seperti gelas kosong belum diisi.

    • null: gelas sengaja dikosongkan.

    • any: seperti membawa benda apapun ke kelas โ€” bisa berbahaya.

    • unknown: bawa benda aneh, tapi harus diperiksa dulu.

    • never: pintu keluar yang tidak pernah terbuka.

  • Tambahkan latihan deteksi tipe:

      function detect(val: any) {
        if (typeof val === "string") return "string";
        if (typeof val === "number") return "number";
        return "something else";
      }
    
0
Subscribe to my newsletter

Read articles from Ariska Hidayat directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Ariska Hidayat
Ariska Hidayat

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.