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 TerbukaTypeScript 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