Learn
← Previous Next →

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