Utility Type: Omit
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu diharapkan dapat:
- Menjelaskan fungsi dari Utility Type
Omit<T, K>. - Menggunakan
Omituntuk membuang properti objek yang tidak diinginkan. - Membedakan penggunaan
PickdanOmit.
Pendahuluan
Section titled “Pendahuluan”Jika Pick digunakan untuk memilih properti yang diinginkan, Omit (artinya: menghilangkan / mengabaikan) digunakan untuk membuang properti yang tidak kita inginkan dari sebuah objek.
Contoh: Kita memiliki objek Siswa yang memiliki properti sensitif seperti password dan catatanSanksi. Saat kita ingin mengirim data siswa ke luar sistem (seperti ke aplikasi mobile), kita ingin membuang kedua properti tersebut demi keamanan.
Penjelasan Materi: Cara Kerja Omit
Section titled “Penjelasan Materi: Cara Kerja Omit”Utility Type Omit<T, K> membuat tipe data baru dengan membuang properti (kunci K) dari tipe asal T.
Sintaks dasar:
type TipeBaru = Omit<TipeAsal, "kunci1" | "kunci2">;Tipe baru yang dihasilkan akan memiliki seluruh properti TipeAsal kecuali properti "kunci1" dan "kunci2".
Analogi Kehidupan Sehari-hari: Menyensor Kolom Rahasia dari Map Rapor
Section titled “Analogi Kehidupan Sehari-hari: Menyensor Kolom Rahasia dari Map Rapor”Kamu memiliki map rapor lengkap siswa. Untuk keperluan dibagikan kepada pengurus kelas:
Kamu memfotokopi map rapor tersebut, namun sengaja menempelkan selotip kertas hitam di atas kolom “Catatan Pelanggaran Sikap” dan “Alamat Rumah” agar tertutup saat difotokopi.
Omit<Rapor, "Catatan" | "Alamat"> = Hasil fotokopi yang kolom catatan dan alamatnya telah dihilangkanHasil cetak fotokopi yang baru memuat seluruh data rapor kecuali bagian yang disensor tersebut.
Visual Illustration: Transformasi Omit
Section titled “Visual Illustration: Transformasi Omit”Tipe Asli: { nama: string, kelas: string, nilai: number } │ ▼ Diproses Omit<T, "nilai">Tipe Baru: { nama: string, kelas: string }Mari Mencoba: Menyensor Password Akun Siswa
Section titled “Mari Mencoba: Menyensor Password Akun Siswa”Mari kita buat program yang menyaring data akun siswa sebelum ditampilkan ke publik menggunakan Omit.
Buat file bernama src/bab9/omit-utility.ts:
type AkunSiswa = { id: string; nama: string; email: string; passwordHash: string; // properti sensitif saldoKantin: number;};
// Membuat tipe publik dengan membuang 'passwordHash'type ProfilPublik = Omit<AkunSiswa, "passwordHash">;
const dataAkun: AkunSiswa = { id: "SIS-1001", nama: "Putra Ramadhan", email: "putra@smk.sch.id", passwordHash: "sha256$8f9g2h1j", saldoKantin: 25000};
// Objek ini dilarang keras memuat properti passwordHashconst profilTampil: ProfilPublik = { id: dataAkun.id, nama: dataAkun.nama, email: dataAkun.email, saldoKantin: dataAkun.saldoKantin};
console.log("Profil Publik (Aman):", profilTampil);
// Coba lakukan ini (Error!)// const profilBocor: ProfilPublik = {// ...dataAkun // Error! passwordHash ikut masuk padahal tidak boleh ada di ProfilPublik// };Jalankan dengan perintah:
tsx src/bab9/omit-utility.tsOutput
Section titled “Output”Profil Publik (Aman): { id: 'SIS-1001', nama: 'Putra Ramadhan', email: 'putra@smk.sch.id', saldoKantin: 25000}Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”Omit<AkunSiswa, "passwordHash">— Membuat tipe baru yang memiliki seluruh propertiAkunSiswakecualipasswordHash.- Objek
profilTampilberhasil divalidasi oleh TypeScript sehingga data rahasiapasswordHashaman tidak terikut di dalamnya.
Pick vs Omit: Pilih yang Mana?
Section titled “Pick vs Omit: Pilih yang Mana?”- Gunakan
Pickjika properti yang ingin diambil jumlahnya sedikit (misal: punya 20 properti, hanya butuh 2). - Gunakan
Omitjika properti yang ingin dibuang jumlahnya sedikit (misal: punya 20 properti, ingin membuang 2 saja).
Latihan
Section titled “Latihan”- Buat tipe
Mobil(merk: string, platNomor: string, warna: string). - Buat tipe
MobilUmumyang membuang propertiplatNomormenggunakanOmit. - Buat objeknya dan tampilkan hasilnya.
Ringkasan
Section titled “Ringkasan”Omit<T, K>membuat tipe baru dengan membuang beberapa propertiKdari objekT.- Berguna untuk menyembunyikan properti sensitif sebelum dikirim ke client/publik.
- Membantu efisiensi penulisan dibanding harus menulis ulang properti-properti sisa secara manual.