Type Alias — TypeScript

Type alias memberi nama pada tipe dengan keyword type: type ID = string | number; type Point = { x: number; y: number }; let userId: ID = "abc123"; let pos…

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 = number dan type Dolar = number. Kalau harga yang bertipe Rupiah dimasukkan ke variabel bertipe Dolar, 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
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

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

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.

Yang akan kamu pelajari