Lewati ke konten

Intersection Type

Setelah halaman ini, kamu dapat menggunakan operator & untuk menggabungkan beberapa tipe objek menjadi satu tipe baru yang memiliki seluruh properti gabungan tersebut.


Jika extends digunakan untuk mewariskan properti pada interface, bagaimana cara menggabungkan properti pada type alias? Kita menggunakan Intersection Type dengan simbol ampersand & (dibaca “dan”).


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:

📄 TypeScript
type TipeGabungan = TipeA & TipeB;

Bayangkan seorang mahasiswa tingkat akhir yang juga bekerja sebagai guru honorer di sekolah.

🖥️ Output
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.


🖥️ Output
type A = { nama: string }
type B = { nis: number }
type C = A & B ──► wajib memiliki: nama DAN nis

Buat src/bab7/intersection-type.ts:

📄 TypeScript
type Identitas = {
nama: string;
umur: number;
}
type Karyawan = {
nip: number;
divisi: string;
}
// Menggabungkan Identitas DAN Karyawan
type 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:

🖥️ Output
tsx src/bab7/intersection-type.ts
🖥️ Output
Staf 1: { nama: 'Pak Budi', umur: 35, nip: 19890102, divisi: 'Tata Usaha' }

Keduanya memiliki tujuan yang mirip (menggabungkan properti), tapi digunakan di tempat berbeda:

  • extends digunakan untuk memperluas interface.
  • & (intersection) digunakan untuk menggabungkan type alias.

❌ Menggabungkan tipe primitif yang bertolak belakang

Section titled “❌ Menggabungkan tipe primitif yang bertolak belakang”
📄 TypeScript
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 |.


  1. Buat tipe KoordinatX { x: number }.
  2. Buat tipe KoordinatY { y: number }.
  3. Buat tipe Titik hasil gabungan keduanya (KoordinatX & KoordinatY).
  4. Buat objek titikA bertipe Titik dan tampilkan.

  • Intersection type (&) menggabungkan beberapa tipe objek menjadi satu.
  • Hubungan logika: “DAN” (wajib memiliki semua properti).
  • Setara dengan fitur extends pada interface tetapi digunakan pada type alias.