Builder yang Tidak Dapat Diubah
Kembalikan instans builder baru untuk komposisi yang lebih aman.
Builder yang Tidak Dapat Diubah adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.
Mutasi vs Kekekalan
Pembangun sejauh ini mengubah this dan mengembalikannya. Sebaliknya, pembangun yang tidak dapat diubah mengembalikan instans pembangun baru pada setiap langkah dan tidak pernah mengubah yang asli. Hal ini membuat komposisi lebih aman.
Masalah Mutasi Bersama
Jika dua bagian kode Anda menyimpan pembangun yang dapat diubah dan sama, satu panggilan penyetel akan memengaruhi keduanya. Pembangun yang tidak dapat diubah sepenuhnya menghindari kejutan akibat rujukan bersama ini.
const base = makeMutableBuilder().url("/x");
// If base is shared, later .method() calls mutate everyone's copy.Mengembalikan Instans Baru
Penyetel yang tidak dapat diubah menyalin keadaan saat ini, menambahkan bidang baru, lalu membuat pembangun baru. Pembangun asli tidak tersentuh.
class IB<S> {
constructor(private readonly d: Record<string, unknown> = {}) {}
with<K extends string, V>(k: K, v: V): IB<S & Record<K, V>> {
return new IB<S & Record<K, V>>({ ...this.d, [k]: v });
}
}Berbagi Struktur melalui Operator Sebar
Sebaran { ...this.d, [k]: v } menyalin entri yang ada dan menimpa satu kunci. Nilai yang tidak berubah dibagikan melalui rujukan, sehingga penyalinan tetap ringan.
const a = new IB<{}>().with("url", "/x");
const c = a.with("method", "GET");
// a still only has url; c has url and method.Objek Asli Tidak Pernah Berubah
Karena setiap langkah menghasilkan objek baru, membuat percabangan dari pembangun sebelumnya menjadi aman. Anda dapat menggunakan kembali dasar yang telah dibangun sebagian di banyak tempat.
const base = new IB<{}>().with("url", "/api");
const get = base.with("method", "GET");
const post = base.with("method", "POST");
console.log("base untouched; get and post diverge");Keadaan Internal yang Hanya Dapat Dibaca
Menandai data internal sebagai readonly mendokumentasikan maksud tersebut dan mencegah penulisan langsung yang tidak disengaja di dalam kelas. Satu-satunya cara untuk melanjutkan adalah membuat instans baru.
class IB<S> {
constructor(private readonly d: Readonly<Record<string, unknown>> = {}) {}
}Build Bertipe yang Tidak Dapat Diubah
Parameter keadaan tetap diteruskan, sehingga kita dapat membatasi build() seperti sebelumnya, kini di atas dasar yang tidak dapat diubah.
interface Out { url: string; method: string }
class IB<S> {
constructor(private readonly d: Record<string, unknown> = {}) {}
with<K extends string, V>(k: K, v: V): IB<S & Record<K, V>> {
return new IB<S & Record<K, V>>({ ...this.d, [k]: v });
}
build(this: IB<{ url: string; method: string }>): Out { return this.d as Out; }
}
const out = new IB<{}>().with("url", "/u").with("method", "GET").build();
console.log(out.url);Komposisi yang Lebih Aman
Pembangun yang tidak dapat diubah dapat dikomposisikan seperti nilai: teruskan, turunkan yang baru, dan jangan khawatir bahwa panggilan berikutnya akan menulis ulang keadaan bersama. Inilah manfaat yang sama seperti yang diberikan data yang tidak dapat diubah di mana pun.
Prasetel yang Dapat Digunakan Ulang
Anda dapat menyimpan satu titik awal yang umum lalu membuat banyak cabang darinya. Setiap cabang berdiri sendiri berkat penyetel salin-saat-menulis.
const jsonBase = new IB<{}>().with("header", "application/json");
const usersReq = jsonBase.with("url", "/users");
const ordersReq = jsonBase.with("url", "/orders");
console.log("two independent requests from one base");Pertimbangan Biaya
Setiap langkah mengalokasikan objek baru. Untuk pembuatan config yang umum, biayanya dapat diabaikan, dan berbagi struktur membuat salinan tetap dangkal. Hanya perulangan yang sangat sering dijalankan yang akan menyadarinya.
Ringkasan Dapat Diubah vs Tidak Dapat Diubah
Pembangun yang dapat diubah sedikit lebih cepat dan sederhana; pembangun yang tidak dapat diubah lebih aman untuk dibagikan dan dipahami. Pilih yang tidak dapat diubah ketika pembangun diteruskan ke berbagai bagian atau digunakan kembali sebagai prasetel.
Pemeriksaan Singkat
Pemeriksaan singkat tentang pelajaran ini.
Rangkuman
Pembangun yang tidak dapat diubah mengembalikan instans baru pada setiap langkah menggunakan berbagi struktur { ...this.d, [k]: v }, tanpa pernah mengubah this. Objek asli tetap utuh, sehingga komposisi aman dan prasetel dapat digunakan kembali, dengan biaya alokasi yang kecil.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Builder yang Tidak Dapat Diubah” gratis?
Ya — teks lengkap “Builder yang Tidak Dapat Diubah” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Builder yang Tidak Dapat Diubah”?
Kembalikan instans builder baru untuk komposisi yang lebih aman. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai TypeScript Academy?
Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Builder yang Tidak Dapat Diubah” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?
Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar Pola Builder
- Antarmuka Fluent dengan Jenis
- Memastikan Langkah Wajib
- Builder yang Tidak Dapat Diubah