Type alias adalah nama yang kamu kasih ke sebuah type, pakai kata kunci type. Type-nya ditulis sekali, lalu namanya dipakai di mana-mana. Mirip kontak di HP: nomor 0812-3456-7890 kamu simpan sebagai "Ibu". Setelah itu kamu cukup ketuk "Ibu", dan HP menelepon nomor yang sama. Kalau nomornya ganti, kamu ubah sekali di kontak, dan semua panggilan ikut nomor baru.
🧪 Tebakan cepat: ada
type Rupiah = numberdantype Dolar = number. Kalauhargayang bertipeRupiahdimasukkan ke variabel bertipeDolar, TypeScript menolak atau menerima? Tebak dulu, jawabannya ada di bagian "Alias cuma nama, bukan type baru".
Kasih nama ke sebuah type
type ID = string | number;
let kodeUser: ID = "U-001";
let kodeOrder: ID = 1024;
let aktif: ID = true; // error
type ID = ...bikin nama baru,ID, untuk type di sebelah kanan tanda=. Nama alias biasanya diawali huruf besar.string | numberdibaca "string atau number". Tanda|(pipe) menggabungkan beberapa type jadi pilihan. Gabungan ini namanya union, dan pelajaran berikutnya membahasnya lebih dalam.kodeUser: IDartinya sama persis dengankodeUser: string | number. Waktu mengecek, TypeScript menggantiIDdengan isinya.
| Variabel | Nilai | Type nilainya | Masuk string | number? |
Kata TypeScript |
|---|---|---|---|---|
kodeUser |
"U-001" |
string | ya | lolos |
kodeOrder |
1024 |
number | ya | lolos |
aktif |
true |
boolean | tidak | Type 'boolean' is not assignable to type 'ID'. |
Pesan itu artinya: nilai boolean gak boleh dimasukkan ke ID. Di editor, pesannya diakhiri kode ts(2322). Kode ini nomor error-nya: pesan yang sama selalu bernomor sama, jadi gampang dicari.
Ubah sekali, semua ikut
Sekarang isi alias-nya diganti jadi type ID = string;. Baris lain gak kamu sentuh sama sekali, tapi TypeScript mengecek ulang semuanya:
type ID = string;
let kodeUser: ID = "U-001"; // lolos
let kodeOrder: ID = 1024; // Type 'number' is not assignable to type 'string'.
Satu baris berubah, dan TypeScript langsung menunjuk semua tempat yang gak cocok lagi. Itu gunanya alias: kalau type yang sama dipakai di 20 tempat, kamu cukup mengubah satu baris. Perhatikan juga pesannya menyebut string, bukan ID. Alias untuk satu type dasar ditampilkan dengan isinya.
Alias untuk bentuk object
Alias juga bisa menamai bentuk object, yang sudah kamu kenal dari pelajaran object types:
type Titik = { x: number; y: number };
let awal: Titik = { x: 0, y: 0 };
let akhir: Titik = { x: 10 }; // error
Titiksekarang berarti "object denganxdany, dua-duanya number".akhirgak punyay, jadi TypeScript menolak:Property 'y' is missing in type '{ x: number; }' but required in type 'Titik'.(ts(2741)).
type atau interface?
Di pelajaran sebelumnya kamu memakai interface untuk bentuk object. Bedanya dengan type:
type |
interface |
|
|---|---|---|
| Bentuk object | bisa: type Titik = { x: number; y: number }; |
bisa: interface Titik { x: number; y: number } |
Union, seperti string | number |
bisa | gak bisa |
| Nama yang sama ditulis dua kali | error Duplicate identifier 'Titik'. |
digabung jadi satu |
interface selalu butuh kurung kurawal setelah namanya, jadi dia cuma bisa menggambarkan bentuk object. Coba tulis interface ID = string | number;, dan TypeScript berhenti di tanda = dengan error '{' expected. (ts(1005)). Jadi untuk union, type dasar, atau apa pun yang bukan object, pakai type. Untuk bentuk object, dua-duanya boleh; ikuti kebiasaan tim atau proyekmu.
Alias cuma nama, bukan type baru
type Rupiah = number;
type Dolar = number;
let harga: Rupiah = 15000;
let kurs: Dolar = harga; // gak error
TypeScript menerimanya. Rupiah dan Dolar sama-sama cuma nama lain untuk number, jadi di mata TypeScript keduanya type yang sama. Itu jawaban tebakannya. Alias gak bikin type baru yang terpisah. Kalau kamu butuh TypeScript membedakan dua hal yang sama-sama number, alias saja gak cukup.
Alias juga gak ikut ke JavaScript. Waktu kode TypeScript diubah jadi JavaScript, semua baris type dan semua penanda : Rupiah dihapus:
let harga = 15000;
let kurs = harga;
Alias di parameter fungsi
Alias boleh dipakai di parameter dan return fungsi, sama seperti type biasa:
type Ukuran = number;
function luasPersegi(sisi: Ukuran): number {
return sisi * sisi;
}
console.log(luasPersegi(5)); // 25
Di latihan, fungsi hitungLuas(bentuk, ukuran) memilih rumus dari isi bentuk:
| Panggilan | Rumus | Hasil |
|---|---|---|
hitungLuas("persegi", 5) |
5 * 5 |
25 |
hitungLuas("persegi", 4) |
4 * 4 |
16 |
hitungLuas("lingkaran", 3) |
Math.PI * 3 * 3 = 28,27..., lalu Math.round |
28 |
Math.round(...) membulatkan ke bilangan bulat terdekat, jadi 28,27 jadi 28. Luas persegi sudah bilangan bulat, jadi gak perlu dibulatkan.
⚠️ Jebakan yang sering ketemu
- Menulis
typesepertiinterface.type Titik { x: number }error'=' expected.Type alias selalu pakai tanda=. - Mengira alias bikin type baru.
RupiahdanDolartetap sama-samanumber, jadi TypeScript gak bisa mencegah keduanya tertukar. - Menulis alias dengan nama yang sama dua kali.
typegak digabung sepertiinterface, hasilnyaDuplicate identifier. - Lupa
Math.rounddi lingkaran.Math.PI * 3 * 3hasilnya 28,274333882308138, bukan 28.
TL;DR: type NamaAlias = ...; memberi nama ke type apa pun: type ID = string | number;, type Titik = { x: number; y: number };. Namanya bisa dipakai di variabel dan parameter, dan kalau isinya diubah, semua tempat ikut dicek ulang. Nilai yang gak cocok ditolak dengan error seperti Type 'boolean' is not assignable to type 'ID'. Union cuma bisa dinamai dengan type, bukan interface. Alias cuma nama lain, bukan type baru, dan hilang waktu kode diubah jadi JavaScript.