Union Type
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah halaman ini, kamu dapat membuat union type menggunakan operator | untuk mengizinkan variabel atau parameter memiliki beberapa tipe data yang valid.
Pendahuluan
Section titled “Pendahuluan”Data dari dunia nyata tidak selalu konsisten dalam satu tipe. Contoh: Nomor Induk Siswa (NIS) ada yang ditulis berupa angka (3515001), ada yang ditulis berupa teks string karena mengandung huruf (NIS-3515001).
Jika kita mengunci tipe NIS hanya pada number, program kita akan error saat menerima teks. Union Type memecahkan masalah ini.
Penjelasan Materi
Section titled “Penjelasan Materi”Union Type memungkinkan suatu variabel, properti, atau parameter memiliki lebih dari satu jenis tipe data yang valid. Kita menggunakan simbol pipa vertikal | (dibaca “atau”) untuk memisahkan tipe-tipe tersebut.
let nis: string | numberVariabel nis di atas secara sah boleh diisi dengan string atau number.
Analogi Kehidupan Sehari-hari
Section titled “Analogi Kehidupan Sehari-hari”Kendaraan Bisa Mobil ATAU Motor
Section titled “Kendaraan Bisa Mobil ATAU Motor”Bayangkan area parkir sekolah bertuliskan: “Hanya untuk Mobil ATAU Motor”.
Tempat Parkir (Union Type) ├── Boleh Mobil (Tipe A) └── Boleh Motor (Tipe B)
Pengunjung bawa Mobil ──► Diizinkan parkir ✓Pengunjung bawa Motor ──► Diizinkan parkir ✓Pengunjung bawa Sepeda ──► Ditolak parkir ✗Area parkir tersebut fleksibel untuk dua jenis kendaraan, tetapi tetap melarang jenis kendaraan lain yang tidak terdaftar (seperti sepeda atau truk).
Visual Illustration
Section titled “Visual Illustration”type ID = string | number ▲ bisa string ATAU numberMari Mencoba
Section titled “Mari Mencoba”Buat src/bab7/union-type.ts:
// 1. Membuat Type Alias dengan Uniontype IDKaryawan = string | number;
function cetakID(id: IDKaryawan): void { // Pengecekan tipe (Type Guarding) sebelum memproses if (typeof id === "string") { console.log(`ID (Teks) : ${id.toUpperCase()}`) } else { console.log(`ID (Angka): ${id * 2} (simulasi hitung)`) }}
// 2. Uji coba dengan berbagai tipe validcetakID("karyawan-001") // valid stringcetakID(12345) // valid number
// cetakID(true) // Error! boolean tidak ada di tipe IDKaryawanJalankan:
tsx src/bab7/union-type.tsOutput
Section titled “Output”ID (Teks) : KARYAWAN-001ID (Angka): 24690 (simulasi hitung)Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”type IDKaryawan = string | number— membuat tipe baru yang mengizinkan string atau number.typeof id === "string"— karena parameteridbisa berupa string atau number, kita harus menggunakan Type Guard (typeof) agar bisa menggunakan metode khusus string seperti.toUpperCase()dengan aman tanpa memicu compiler error.
Kesalahan yang Sering Terjadi
Section titled “Kesalahan yang Sering Terjadi”❌ Langsung menggunakan metode khusus tipe tertentu tanpa melakukan Type Guarding
Section titled “❌ Langsung menggunakan metode khusus tipe tertentu tanpa melakukan Type Guarding”function cetak(id: string | number) { console.log(id.toUpperCase()) // Error! // Property 'toUpperCase' does not exist on type 'string | number'.}Perbaikan: Gunakan if (typeof id === "string") untuk memastikan tipenya terlebih dahulu sebelum memanggil metode spesifik tipe tersebut.
Latihan
Section titled “Latihan”Buat variabel statusUjian bertipe boolean | string. Isi dengan true lalu tampilkan, kemudian ubah nilainya menjadi "Remedial" dan tampilkan lagi.
Ringkasan
Section titled “Ringkasan”- Union type (
|) mengizinkan variabel memiliki lebih dari satu tipe data yang valid. - Dibaca sebagai hubungan logika “ATAU”.
- Wajib menggunakan
if (typeof ...)(Type Guard) sebelum menggunakan metode khusus dari salah satu tipe data gabungan tersebut.