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

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
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)โxbisaundefined.
๐ 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
anykecuali 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
unknownsaat menerima data eksternal (API,JSON.parse, dll).
๐ 5. never: Tidak Akan Pernah Terjadi
Penjelasan:
never artinya fungsi/tindakan tidak pernah menghasilkan nilai โ biasanya karena:
Throw error
Loop tak berujung
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
| Tipe | Arti | Contoh | Catatan Penggunaan |
undefined | Belum diisi | `let a: number | undefined` |
null | Kosong disengaja | `let a: string | null` |
any | Bebas tanpa kontrol | let x: any = 42 | Hindari kecuali sangat terpaksa |
unknown | Bebas, tapi harus diperiksa | let x: unknown; if (typeof x === "string") | Lebih aman daripada any |
never | Tidak mungkin terjadi | throw 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"; }





