Hari 5: Enum & Literal Types
55 min
Last updated 09 Apr 2026
Enum — Kumpulan Konstanta Bernama
// Numeric enum (default)
enum Arah {
Utara, // 0
Selatan, // 1
Timur, // 2
Barat, // 3
}
console.log(Arah.Utara); // 0
console.log(Arah[0]); // "Utara"
// String enum (lebih aman untuk debugging)
enum Status {
Aktif = "ACTIVE",
NonAktif = "INACTIVE",
Pending = "PENDING",
}
const s: Status = Status.Aktif;
console.log(s); // "ACTIVE"
// Const enum — dihapus saat kompilasi, lebih efisien
const enum Ukuran { XS, S, M, L, XL }
Literal Types
// String literal
type Tema = "light" | "dark" | "system";
let tema: Tema = "dark";
// Number literal
type Dadu = 1 | 2 | 3 | 4 | 5 | 6;
let hasil: Dadu = 4;
// Template literal type (TS 4.1+)
type Arah2 = "north" | "south" | "east" | "west";
type KoordinatLabel = `${number},${number}`;
type EventName = `on${Capitalize}`;
💡
Notice: Numeric enum bisa dibandingkan dengan >= karena mereka adalah angka. Level[k.level] mengambil nama dari nilai numeric.
Assignment
Buat enum Level {Pemula, Menengah, Mahir} dan type Kursus = {judul: string, level: Level, durasi: number}. Buat 3 kursus, filter yang level >= Menengah, tampilkan.
Expected output:
JavaScript (Menengah) - 15 jam
TypeScript Pro (Mahir) - 20 jam
TS
index.ts
Solution
Output