Utility Type: Readonly
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu diharapkan dapat:
- Menjelaskan fungsi dari Utility Type
Readonly<T>. - Mengamankan data objek agar bersifat read-only (hanya bisa dibaca).
- Membedakan properti readonly individu dengan Utility Type
Readonly.
Pendahuluan
Section titled “Pendahuluan”Di BAB 7 kita belajar bahwa kita bisa mengunci properti satu per satu menggunakan kata kunci readonly nis: number.
Namun, jika sebuah objek memiliki 20 properti dan kita ingin mengunci seluruh properti tersebut secara bersamaan tanpa mengetik kata kunci readonly sebanyak 20 kali, kita bisa menggunakan Utility Type Readonly<T>.
Penjelasan Materi: Cara Kerja Readonly
Section titled “Penjelasan Materi: Cara Kerja Readonly”Utility Type Readonly<T> mengambil seluruh properti dari tipe T dan menambahkan status readonly di depannya. Setelah objek dibuat, nilainya tidak boleh diubah.
type Siswa = { nama: string; umur: number;};
// Tipe "SiswaTerkunci" setara dengan: { readonly nama: string; readonly umur: number; }type SiswaTerkunci = Readonly<Siswa>;Analogi Kehidupan Sehari-hari: Dokumen Resmi Terproteksi (Kertas Segel)
Section titled “Analogi Kehidupan Sehari-hari: Dokumen Resmi Terproteksi (Kertas Segel)”Bayangkan selembar Kertas Surat Kelulusan:
Surat Kelulusan Asli ├── Nama Siswa └── Status KelulusanSebelum dibagikan, kepala sekolah memasukkan surat tersebut ke dalam map laminating plastik tebal yang diselelasikan panas. Surat tersebut kini terkunci rapat (Readonly).
Readonly<Surat> = Surat yang dilaminating tebal (tidak bisa dicorat-coret lagi)Kamu bisa membaca isinya dengan jelas, tetapi kamu dilarang keras mengubah tulisan nama atau nilainya menggunakan pulpen.
Visual Illustration: Transformasi Readonly
Section titled “Visual Illustration: Transformasi Readonly”Tipe Asli: { nama: string, kelas: string } │ ▼ Diproses Readonly<T>Tipe Baru: { readonly nama: string, readonly kelas: string }Mari Mencoba: Mengamankan Konfigurasi Aplikasi Sekolah
Section titled “Mari Mencoba: Mengamankan Konfigurasi Aplikasi Sekolah”Mari buat program objek konfigurasi aplikasi yang dikunci agar tidak bisa diubah di tengah jalan oleh kode lain.
Buat file bernama src/bab9/readonly-utility.ts:
type ConfigAplikasi = { namaSekolah: string; versi: string; tahunAjaran: number;};
const configMentah: ConfigAplikasi = { namaSekolah: "SMKS Antartika 1", versi: "3.2.0", tahunAjaran: 2026};
// Mengunci konfigurasi menggunakan Readonlyconst CONFIG_RESMI: Readonly<ConfigAplikasi> = configMentah;
console.log("Aplikasi:", CONFIG_RESMI.namaSekolah);console.log("Versi :", CONFIG_RESMI.versi);
// Coba lakukan ini (Error!)// CONFIG_RESMI.versi = "4.0.0"; // ✗ Error!// Cannot assign to 'versi' because it is a read-only property.Jalankan dengan perintah:
tsx src/bab9/readonly-utility.tsOutput
Section titled “Output”Aplikasi: SMKS Antartika 1Versi : 3.2.0Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”Readonly<ConfigAplikasi>— Mengubah seluruh propertinamaSekolah,versi, dantahunAjaranmenjadi read-only.CONFIG_RESMI.versi = ...— TypeScript langsung mendeteksi pelanggaran penulisan data dan menampilkan error merah sebelum kode dikompilasi.
Latihan
Section titled “Latihan”- Buat tipe
Siswa(nama: string, kelas: string). - Buat objek
siswaKuncibertipeReadonly<Siswa>. - Coba ubah nama siswa tersebut dan amati pesan error TypeScript.
Ringkasan
Section titled “Ringkasan”Readonly<T>mengunci seluruh properti objek agar tidak bisa diubah setelah diinisialisasi.- Menjaga integritas data penting seperti konfigurasi aplikasi atau data database.
- Menghasilkan error kompilasi jika ada upaya penulisan ulang properti objek terproteksi.