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


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
bisaundefined
.
๐ 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:
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"; }
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.