Utility Type: Extract
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu diharapkan dapat:
- Menjelaskan fungsi dari Utility Type
Extract<T, U>. - Menggunakan
Extractuntuk menyaring tipe union yang beririsan. - Membedakan penggunaan
ExcludedanExtract.
Pendahuluan
Section titled “Pendahuluan”Kebalikan dari Exclude adalah Extract (artinya: mengekstrak / mengambil).
Jika Exclude digunakan untuk membuang beberapa pilihan dari tipe union, Extract digunakan untuk hanya mengambil pilihan tertentu yang cocok dari tipe union tersebut.
Penjelasan Materi: Cara Kerja Extract
Section titled “Penjelasan Materi: Cara Kerja Extract”Utility Type Extract<T, U> digunakan untuk membuat tipe baru dengan mengambil (extracting) tipe-tipe yang dapat dimasukkan ke dalam U dari tipe union T.
Sintaks dasar:
type TipeBaru = Extract<TipeUnionAsal, TipeYangInginDiambil>;Analogi Kehidupan Sehari-hari: Mengambil Buku Kategori Tertentu dari Lemari
Section titled “Analogi Kehidupan Sehari-hari: Mengambil Buku Kategori Tertentu dari Lemari”Bayangkan kamu memiliki sekotak campuran berbagai jenis buku:
Kotak Buku: [Kamus, Novel, Majalah, Komik, Buku Pelajaran]Kamu ingin memilah dan hanya mengambil buku yang merupakan kategori karya fiksi (Novel dan Komik).
Extract<Kotak Buku, Novel | Komik> = Hasil pilahan buku [Novel, Komik]Kamu membuang jenis buku lain (Kamus, Majalah) dari daftar pilahanmu dan hanya berfokus pada dua jenis buku fiksi tersebut.
Visual Illustration: Transformasi Extract
Section titled “Visual Illustration: Transformasi Extract”Tipe Asli: "A" | "B" | "C" │ ▼ Diproses Extract<T, "B" | "C">Tipe Baru: "B" | "C"Mari Mencoba: Menyaring Jenis Mata Pelajaran Kejuruan
Section titled “Mari Mencoba: Menyaring Jenis Mata Pelajaran Kejuruan”Mari kita buat program penyaringan tipe union mata pelajaran sekolah menggunakan Extract.
Buat file bernama src/bab9/extract-utility.ts:
type SemuaMapel = "Matematika" | "Agama" | "Pemrograman" | "DesainGrafis" | "Fisika";
// Hanya mengambil mata pelajaran kejuruan RPL/DKVtype MapelKejuruan = Extract<SemuaMapel, "Pemrograman" | "DesainGrafis" | "Jaringan">;
let mapelPraktik: MapelKejuruan;mapelPraktik = "Pemrograman"; // ✓ ValidmapelPraktik = "DesainGrafis"; // ✓ Valid
console.log("Mapel Praktik:", mapelPraktik);
// Coba lakukan ini (Error!)// mapelPraktik = "Matematika"; // ✗ Error!// Type '"Matematika"' is not assignable to type 'MapelKejuruan'.Jalankan dengan perintah:
tsx src/bab9/extract-utility.tsOutput
Section titled “Output”Mapel Praktik: PemrogramanPenjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”Extract<SemuaMapel, "Pemrograman" | "DesainGrafis" | "Jaringan">— TypeScript membandingkan kedua union. Nilai yang beririsan (ada di keduanya) adalah"Pemrograman"dan"DesainGrafis". Nilai"Jaringan"diabaikan karena tidak ada diSemuaMapel. Tipe baru yang dihasilkan adalah"Pemrograman" | "DesainGrafis".- Variabel
mapelPraktikdikunci hanya menerima nilai hasil irisan tersebut.
Latihan
Section titled “Latihan”- Buat tipe union
Nilai = "A" | "B" | "C" | "D" | "E". - Buat tipe
NilaiLulusyang mengekstrak nilai"A","B", dan"C"menggunakanExtract. - Buat variabelnya dan tampilkan.
Ringkasan
Section titled “Ringkasan”Extract<T, U>menyaring tipe union dengan hanya mengambil bagian yang beririsan denganU.- Berguna untuk memisahkan sub-kelompok tipe data dari tipe union induk yang besar.