Typescript Branded Types Nominal Typing Structural Typing Workaround
Definisi
TypeScript menggunakan structural typing: dua tipe dianggap sama kalau bentuknya sama. Branded (nominal) types adalah teknik memberi "cap" pada tipe primitif supaya UserId tidak bisa diisi mentah string biasa, meski keduanya secara struktur sama-sama string.
Kapan dipakai
Pakai branded type kalau kamu sering salah kirim string yang sebenarnya punya makna berbeda: UserId vs Email vs PostId, atau USD vs EUR. Ini mencegah bug "salah kirim ID" di boundary fungsi. Jangan pakai untuk semua string — hanya di titik rawan salah arti.
Cara kerja
Pola dasar
type Brand<T, B extends string> = T & { __brand: B