ReadonlyArray dan ReadonlyMap
Gunakan jenis koleksi readonly terbina dalam.
ReadonlyArray dan ReadonlyMap ialah pelajaran TypeScript Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran TypeScript Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.
Jenis Koleksi Baca Sahaja
Selain tatasusunan, TypeScript menyediakan varian baca sahaja bagi koleksi terbina dalamnya: ReadonlyArray<T>, ReadonlyMap<K, V> dan ReadonlySet<T>. Setiap satunya hanya mendedahkan bahagian API yang tidak mengubah data.
const arr: ReadonlyArray<number> = [1, 2, 3];
console.log(arr.length, arr.includes(2));Ringkasan ReadonlyArray
ReadonlyArray<T> membenarkan lelaran, pengindeksan dan kaedah seperti map serta filter, tetapi tidak membenarkan push, pop atau penetapan indeks. Ia ialah bentuk tatasusunan bagi keluarga baca sahaja.
const tags: ReadonlyArray<string> = ['ts', 'js'];
console.log(tags.map((t) => t.toUpperCase()));
// tags.push('css'); // ErrorReadonlyMap
ReadonlyMap<K, V> membolehkan anda mencari nilai, melakukan lelaran dan menyemak kunci, tetapi tidak menyediakan set, delete atau clear. Kandungan peta itu tetap dari sudut pandangan pengguna.
const ages: ReadonlyMap<string, number> = new Map([['Ada', 30], ['Sam', 25]]);
console.log(ages.get('Ada'), ages.has('Sam'));
// ages.set('Lee', 40); // ErrorMembaca daripada ReadonlyMap
Semua operasi membaca kekal tersedia: get, has, size, keys, values, entries dan lelaran. Hanya kaedah yang mengubah data telah dibuang.
const m: ReadonlyMap<string, number> = new Map([['a', 1], ['b', 2]]);
for (const [k, v] of m) {
console.log(k, v);
}
console.log('size:', m.size);ReadonlySet
ReadonlySet<T> menyokong semakan keahlian dan lelaran, tetapi tidak menyediakan add, delete atau clear. Gunakannya untuk set tetap yang mengandungi nilai allowed.
const allowed: ReadonlySet<string> = new Set(['read', 'write']);
console.log(allowed.has('read'), allowed.has('delete'));
// allowed.add('admin'); // ErrorMelakukan Lelaran pada ReadonlySet
Anda boleh melakukan lelaran pada ReadonlySet dan membaca sizenya, tetapi tidak boleh mengubah kandungannya. Ini menjadikannya sesuai untuk senarai putih dan set kebenaran.
const perms: ReadonlySet<string> = new Set(['view', 'edit']);
perms.forEach((p) => console.log('perm:', p));
console.log('count:', perms.size);Menghantar Koleksi Baca Sahaja kepada Fungsi
Terima jenis koleksi baca sahaja dalam fungsi yang hanya perlu membaca data. Ini menyampaikan tujuan dengan jelas dan menghalang fungsi daripada mengubah data milik pemanggil.
function describe(set: ReadonlySet<string>): string {
return 'has ' + set.size + ' items';
}
const s = new Set(['x', 'y']);
console.log(describe(s));Koleksi Boleh Ubah Boleh Ditetapkan
Map atau Set biasa boleh ditetapkan kepada padanan baca sahajanya kerana anda sedang mengehadkan keupayaan, bukannya meluaskannya. Fungsi itu hanya melepaskan hak untuk mengubah data.
function keys(m: ReadonlyMap<string, number>): string[] {
return Array.from(m.keys());
}
const real = new Map([['a', 1]]);
console.log(keys(real));Antara Muka Koleksi Tidak Berubah
Jenis koleksi baca sahaja menerangkan satu view yang tidak berubah. Objek asasnya mungkin masih boleh diubah di tempat lain; jenis baca sahaja itu hanya mengehadkan perkara yang boleh dilakukan oleh rujukan ini.
const backing = new Set<number>([1, 2]);
const view: ReadonlySet<number> = backing;
// view.add(3); // Error through the readonly view
backing.add(3); // but the original can still mutate
console.log(view.size);Memilih Jenis Baca Sahaja yang Tepat
Padankan jenis baca sahaja dengan struktur data anda: ReadonlyArray untuk senarai tersusun, ReadonlyMap untuk carian kunci-nilai dan ReadonlySet untuk keahlian unik. Setiap satunya menguatkuasakan ketidakbolehubahan mengikut bentuknya.
const roles: ReadonlySet<string> = new Set(['admin', 'user']);
const limits: ReadonlyMap<string, number> = new Map([['admin', 100]]);
console.log(roles.has('user'), limits.get('admin'));Keadaan Dikongsi yang Lebih Selamat
Mendedahkan koleksi dalaman sebagai jenis baca sahaja menghalang pemanggil daripada merosakkan keadaan modul anda. Mereka boleh memeriksa data dengan bebas, tetapi hanya kod anda yang boleh mengubahnya.
class Registry {
private items = new Set<string>();
add(name: string): void { this.items.add(name); }
get all(): ReadonlySet<string> { return this.items; }
}
const r = new Registry();
r.add('a');
console.log(r.all.has('a'));Semakan Pantas
Uji pemahaman anda tentang jenis koleksi baca sahaja.
Ringkasan: Koleksi Baca Sahaja
Anda telah mempelajari keluarga koleksi baca sahaja:
ReadonlyArray<T>,ReadonlyMap<K, V>danReadonlySet<T>hanya mendedahkan operasi membaca.- Kaedah yang mengubah data (
set,add,delete,push) telah dibuang. - Koleksi boleh ubah boleh ditetapkan kepada padanan baca sahajanya.
- Koleksi ini sangat sesuai sebagai jenis parameter dan hasil untuk keadaan dikongsi yang lebih selamat.
Akhir sekali, corak ketidakbolehubahan mendalam.
function count(s: ReadonlySet<number>): number {
return s.size;
}
console.log(count(new Set([1, 2, 3])));Pelajari TypeScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 101
- Pelajaran
- 352
Soalan Lazim
Adakah pelajaran “ReadonlyArray dan ReadonlyMap” percuma?
Ya — teks penuh “ReadonlyArray dan ReadonlyMap” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus TypeScript Academy, tingkat taraf kepada CoddyKit PRO. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “ReadonlyArray dan ReadonlyMap”?
Gunakan jenis koleksi readonly terbina dalam. Anda berlatih TypeScript Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan TypeScript Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran TypeScript Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “ReadonlyArray dan ReadonlyMap” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran TypeScript Academy ini?
Ya. Setiap pelajaran TypeScript Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Sifat readonly
- Tatasusunan dan Tuple readonly
- ReadonlyArray dan ReadonlyMap
- Corak Ketidakbolehubahan Mendalam