Utility Type: Required
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu diharapkan dapat:
- Menjelaskan fungsi dari Utility Type
Required<T>. - Menggunakan
Requireduntuk memaksa pengisian seluruh properti objek. - Membedakan cara kerja
PartialdanRequired.
Pendahuluan
Section titled “Pendahuluan”Kebalikan dari Partial adalah Required. Jika Partial digunakan untuk melonggarkan aturan, Required digunakan untuk memperketat aturan.
Terkadang kita memiliki tipe data yang memiliki properti opsional (seperti nomor HP atau email). Namun, pada proses tertentu (seperti finalisasi pendaftaran ujian), kita ingin memaksa agar seluruh properti tersebut wajib diisi tanpa terkecuali.
Penjelasan Materi: Cara Kerja Required
Section titled “Penjelasan Materi: Cara Kerja Required”Utility Type Required<T> mengambil seluruh properti dari tipe T dan menghapus status opsionalnya. Seluruh properti wajib diisi (tidak boleh kosong / undefined).
type Siswa = { nama: string; email?: string; // opsional pada tipe asli};
// Tipe "SiswaWajib" setara dengan: { nama: string; email: string; }type SiswaWajib = Required<Siswa>;Analogi Kehidupan Sehari-hari: Formulir Final yang Wajib Diisi Semua
Section titled “Analogi Kehidupan Sehari-hari: Formulir Final yang Wajib Diisi Semua”Bayangkan saat kamu melakukan verifikasi kelulusan di loket sekolah:
Formulir Pendaftaran (Tipe Asli) ├── Nama Lengkap (Wajib) └── Nomor HP (Opsional ?)Saat mendaftar di awal, nomor HP boleh kosong. Namun, saat verifikasi akhir untuk kartu ujian, petugas loket berkata: “Semua kolom, termasuk Nomor HP, sekarang wajib diisi agar kartu ujian bisa dicetak.”
Required<Formulir> = Formulir yang seluruh kolomnya dipaksa menjadi wajib diisiVisual Illustration: Transformasi Required
Section titled “Visual Illustration: Transformasi Required”Tipe Asli: { nama: string, email?: string } │ ▼ Diproses Required<T>Tipe Baru: { nama: string, email: string }Mari Mencoba: Validasi Data Lengkap Siswa
Section titled “Mari Mencoba: Validasi Data Lengkap Siswa”Mari kita buat program yang memvalidasi bahwa data siswa harus lengkap sebelum dimasukkan ke database ujian.
Buat file bernama src/bab9/required-utility.ts:
type ProfilSiswa = { nama: string; kelas: string; nomorHP?: string; // opsional di profil biasa email?: string; // opsional di profil biasa};
// Objek profil biasa (boleh tidak lengkap)const profilBiasa: ProfilSiswa = { nama: "Putra", kelas: "XI RPL 1"};
// Objek untuk ujian wajib lengkap (Required)const profilUjian: Required<ProfilSiswa> = { nama: "Putra Ramadhan", kelas: "XI RPL 1", nomorHP: "0812345", // wajib diisi! email: "putra@smk.sch.id" // wajib diisi!};
console.log("Profil Biasa:", profilBiasa);console.log("Profil Ujian:", profilUjian);
// Coba lakukan ini (Error!)// const profilUjianError: Required<ProfilSiswa> = {// nama: "Dewi",// kelas: "XI RPL 2"// };// Error: Property 'nomorHP' and 'email' are missing!Jalankan dengan perintah:
tsx src/bab9/required-utility.tsOutput
Section titled “Output”Profil Biasa: { nama: 'Putra', kelas: 'XI RPL 1' }Profil Ujian: { nama: 'Putra Ramadhan', kelas: 'XI RPL 1', nomorHP: '0812345', email: 'putra@smk.sch.id'}Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”email?: string— properti opsional padaProfilSiswa.Required<ProfilSiswa>— memaksa objek agar menyertakannomorHPdanemail. Jika salah satu dikosongkan, TypeScript mendeteksi error saat kompilasi.
Latihan
Section titled “Latihan”- Buat tipe
Mobildengan propertimerk: stringdan properti opsionalpemilik?: string. - Buat objek
mobilLengkapyang wajib menyertakan pemilik menggunakanRequired<Mobil>. - Tampilkan hasilnya.
Ringkasan
Section titled “Ringkasan”Required<T>mengubah seluruh properti opsional menjadi wajib.- Membantu memperketat aturan data pada proses akhir (seperti validasi simpan data).
- Mencegah adanya nilai
undefinedpada properti objek hasil transformasi.