Literal Type dan Enum
Mengunci nilai yang boleh dipakai: string literal, union literal, dan enum.
Literal Type: Nilai Spesifik sebagai Tipe
Tipe tidak harus kategori luas seperti string. Bisa satu nilai persis:
let arah: "utara" | "selatan" | "timur" | "barat";
arah = "utara"; // ok
arah = "tenggara"; // Error: Type '"tenggara"' is not assignableTypo seperti "utaraa" yang di JavaScript jadi bug silent, di sini langsung ditolak. Union literal seperti ini adalah cara paling ringan membatasi pilihan nilai.
Enum: Kumpulan Konstanta Bernama
enum Peran {
Admin = "ADMIN",
Kasir = "KASIR",
Dapur = "DAPUR",
}
function bukaFitur(peran: Peran) {
if (peran === Peran.Admin) {
// ...
}
}
bukaFitur(Peran.Kasir); // ok
bukaFitur("KASIR"); // Error: string bukan PeranEnum mengelompokkan konstanta terkait di satu tempat dengan nama yang jelas, plus dapat dipakai sebagai tipe sekaligus value.
Enum Numerik vs String
Enum tanpa nilai jadi angka berurutan (0, 1, 2...). Enum string seperti di atas lebih aman karena nilainya terbaca saat debugging dan saat dikirim ke API. Enum numerik rawan tertukar kalau urutannya berubah.
Kapan Pakai yang Mana
- Pilihan nilai sederhana dan lokal: union literal (
"kecil" | "besar"). Ringan, tanpa kode runtime tambahan. - Konstanta yang dipakai lintas file dan butuh namespace: enum.
- Nilai dari API yang harus cocok persis: union literal dari string, karena enum tidak otomatis cocok dengan string mentah dari JSON.
Catatan teknis: Enum biasa menghasilkan kode JavaScript saat kompilasi (object lookup).
const enumdi-inline sehingga tanpa overhead runtime, tapi tidak bisa dipakai lintas file denganisolatedModules(setting umum di Vite/Next.js). Kalau ragu, union literal + object konstan biasa adalah pilihan paling aman.