Intersection Type
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah halaman ini, kamu dapat menggunakan operator & untuk menggabungkan beberapa tipe objek menjadi satu tipe baru yang memiliki seluruh properti gabungan tersebut.
Pendahuluan
Section titled “Pendahuluan”Jika extends digunakan untuk mewariskan properti pada interface, bagaimana cara menggabungkan properti pada type alias? Kita menggunakan Intersection Type dengan simbol ampersand & (dibaca “dan”).
Penjelasan Materi
Section titled “Penjelasan Materi”Intersection Type menggabungkan beberapa tipe objek menjadi satu tipe baru. Objek yang menggunakan tipe ini wajib memiliki seluruh properti dari semua tipe yang digabungkan.
Sintaks dasar:
type TipeGabungan = TipeA & TipeB;Analogi Kehidupan Sehari-hari
Section titled “Analogi Kehidupan Sehari-hari”Mahasiswa yang Juga Guru (Asisten Dosen)
Section titled “Mahasiswa yang Juga Guru (Asisten Dosen)”Bayangkan seorang mahasiswa tingkat akhir yang juga bekerja sebagai guru honorer di sekolah.
Manusia A (Mahasiswa DAN Guru) ├── Kartu Mahasiswa (properti Mahasiswa) └── Slip Gaji Guru (properti Guru)Untuk masuk ke ruang rapat akademik khusus, ia harus menunjukkan kedua dokumen tersebut. Ia tidak bisa masuk jika hanya membawa salah satu dokumen. Ia adalah gabungan dari kedua identitas tersebut sekaligus.
Visual Illustration
Section titled “Visual Illustration”type A = { nama: string }type B = { nis: number }
type C = A & B ──► wajib memiliki: nama DAN nisMari Mencoba
Section titled “Mari Mencoba”Buat src/bab7/intersection-type.ts:
type Identitas = { nama: string; umur: number;}
type Karyawan = { nip: number; divisi: string;}
// Menggabungkan Identitas DAN Karyawantype StafSekolah = Identitas & Karyawan;
const staf1: StafSekolah = { nama: "Pak Budi", // dari Identitas umur: 35, // dari Identitas nip: 19890102, // dari Karyawan divisi: "Tata Usaha" // dari Karyawan}
console.log("Staf 1:", staf1)Jalankan:
tsx src/bab7/intersection-type.tsOutput
Section titled “Output”Staf 1: { nama: 'Pak Budi', umur: 35, nip: 19890102, divisi: 'Tata Usaha' }extends vs intersection
Section titled “extends vs intersection”Keduanya memiliki tujuan yang mirip (menggabungkan properti), tapi digunakan di tempat berbeda:
extendsdigunakan untuk memperluasinterface.&(intersection) digunakan untuk menggabungkantypealias.
Kesalahan yang Sering Terjadi
Section titled “Kesalahan yang Sering Terjadi”❌ Menggabungkan tipe primitif yang bertolak belakang
Section titled “❌ Menggabungkan tipe primitif yang bertolak belakang”type Aneh = string & number;// Secara tipe valid, tetapi menghasilkan tipe 'never'// karena tidak ada data yang bisa berupa string sekaligus number secara bersamaan!Perbaikan: Gunakan intersection & hanya untuk menggabungkan tipe objek. Untuk tipe primitif, gunakan union |.
Latihan
Section titled “Latihan”- Buat tipe
KoordinatX{ x: number }. - Buat tipe
KoordinatY{ y: number }. - Buat tipe
Titikhasil gabungan keduanya (KoordinatX & KoordinatY). - Buat objek
titikAbertipeTitikdan tampilkan.
Ringkasan
Section titled “Ringkasan”- Intersection type (
&) menggabungkan beberapa tipe objek menjadi satu. - Hubungan logika: “DAN” (wajib memiliki semua properti).
- Setara dengan fitur
extendspada interface tetapi digunakan padatypealias.