TypeScriptTingkat: Lanjutan7 min

Branded Types (Nominal Typing) untuk Zero-Cost Safety

Cegah pertukaran argumen yang tidak disengaja (misal: UserId tertukar dengan OrderId) dengan menerapkan teknik Branded Types di atas sistem pengetikan struktural TypeScript.

Struktural vs Nominal Typing

Pratinjau Terbuka

TypeScript secara default bertipe struktural (jika bentuk datanya sama, tipenya dianggap kompatibel). Branded types menambahkan tag unik pada compile-time untuk membedakan tipe data primitif yang memiliki bentuk identik.

Contoh Kode Sintaks
// Membuat helper Branded Type
type Brand<K, T> = K & { readonly __brand: T };

type UserId = Brand<number, 'UserId'>;
type OrderId = Brand<number, 'OrderId'>;

function buatUserId(id: number): UserId {
    return id as UserId;
}

function buatOrderId(id: number): OrderId {
    return id as OrderId;
}

function prosesPesananPengguna(uId: UserId, oId: OrderId) {
    console.log(`Proses user #${uId} untuk order #${oId}`);
}

const u = buatUserId(101);
const o = buatOrderId(9901);

prosesPesananPengguna(u, o);
// prosesPesananPengguna(o, u); // Compile Error! UserId tidak kompatibel dengan OrderId!

Live Compiler Runner

Akses Kursus Wajib Login

Buka Akses Penuh Silabus & Praktikum

Masuk dengan akun GitHub, Google, atau Akses Cepat Developer untuk membuka seluruh materi mendalam, menjalankan compiler interaktif, mengerjakan kuis, dan menyimpan progres belajar Anda.

145+ Modul Lengkap•Tersimpan Otomatis•Sertifikat Kelulusan Resmi