Mendefinisikan Konstruktor Jenis
Kodekan konstruktor jenis sebagai pencarian antarmuka.
Mendefinisikan Konstruktor Jenis adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.
Penamaan Konstruktor Tipe
Pengodean ini dimulai dengan memberikan setiap konstruktor tipe sebuah pengenal teks unik yang disebut URI. URI adalah tanda yang menggantikan konstruktor di mana pun kita tidak dapat meneruskan konstruktornya secara langsung.
type ArrayURI = "Array";
type OptionURI = "Option";
// Each container gets a unique string tagAntarmuka Registri
Kita menyimpan satu antarmuka yang memetakan setiap URI ke tipe konkret yang dihasilkannya untuk argumen A tertentu. Antarmuka ini adalah registri. Setiap kunci adalah URI; setiap nilai adalah tipe yang telah diselesaikan.
interface URItoKind<A> {
Array: Array<A>;
Option: A | null;
}
// URItoKind<number>["Array"] is number[]Mencari Konstruktor
Karena registri menggunakan URI sebagai kunci, penerapan konstruktor menjadi sebuah akses terindeks. Untuk mendapatkan "Array yang diterapkan ke angka", Anda mengindeks registri.
type ArrayOfNumber = URItoKind<number>["Array"]; // number[]
type OptionOfString = URItoKind<string>["Option"]; // string | nullGabungan URIS
Kumpulan tanda konstruktor yang valid hanyalah kunci-kunci registri. keyof URItoKind<unknown> menghasilkan gabungan semua URI yang terdaftar, yang kita namai URIS.
type URIS = keyof URItoKind<unknown>; // "Array" | "Option"Penggabungan Deklarasi Memperluas Registri
Salah satu fitur TypeScript yang hebat: antarmuka dengan nama yang sama akan bergabung. Pustaka memanfaatkan hal ini agar setiap modul dapat menambahkan wadahnya sendiri ke URItoKind tanpa mengubah definisi asli.
interface URItoKind<A> {
Tree: { value: A; children: Array<A> };
}
// Now URIS also includes "Tree"Wadah Modular
Berkat penggabungan, wadah yang didefinisikan dalam satu berkas mendaftarkan dirinya secara global. Siapa pun yang mengimpornya dapat menggunakan URI-nya dalam abstraksi generik. Inilah cara fp-ts menambahkan opsi, Either, Task, dan lainnya.
// file a.ts
interface URItoKind<A> { Either: { left: A } | { right: A } }
// file b.ts can now reference the "Either" URIPembawa Semu
Untuk meneruskan "konstruktor yang mana" sebagai tipe pada tingkat nilai, instans membawa URI-nya dalam sebuah properti, sering kali berupa bidang semu. Bidang tersebut tidak pernah menyimpan nilai nyata; bidang itu hanya mencatat tanda untuk sistem tipe.
interface HasURI<F extends URIS> {
readonly _URI: F;
}
// _URI records which constructor an instance is forMemasangkan URI dengan Argumen
Penerapan konstruktor memerlukan dua hal: URI F dan tipe argumen A. Kita akan menggabungkannya dengan sebuah pencarian sehingga (F, A) diselesaikan menjadi tipe konkret melalui registri.
type Apply<F extends URIS, A> = URItoKind<A>[F];
type A = Apply<"Array", number>; // number[]
type B = Apply<"Option", string>; // string | nullMengapa Teks, Bukan Konstruktor
Kita menggunakan teks karena TypeScript dapat menyimpan dan membandingkannya sebagai tipe literal, serta mengindeks registri dengannya. Kita tidak dapat menyimpan konstruktor Array sebagai parameter tipe, tetapi kita dapat menyimpan literal "Array" dan mencarinya.
type Tag = "Array";
type Resolved = URItoKind<boolean>[Tag]; // boolean[]Pencarian Adalah Langkah Kunci
Akses terindeks ini, URItoKind<A>[F], adalah inti pengodean. Akses ini mengubah penerapan tipe yang mustahil, F<A>, menjadi pencarian registri yang sah. Pelajaran berikutnya memformalkannya sebagai Kind<F, A>.
type Kind<F extends URIS, A> = URItoKind<A>[F];
type X = Kind<"Array", number>; // number[]Ringkasan Persiapan
Sekarang Anda memiliki semua bagiannya: URI sebagai tanda, registri URItoKind yang memetakan tanda dan argumen ke tipe konkret, URIS sebagai gabungan tanda, serta penggabungan deklarasi untuk memperluasnya. Pengindeksan registri menyimulasikan penerapan tipe.
// URItoKind = registry, URIS = valid tags,
// URItoKind<A>[F] = "apply constructor F to A"Pemeriksaan Singkat
Uji pemahaman Anda tentang pengodean registri.
Ringkasan
Anda telah mempelajari cara mengodekan konstruktor tipe dengan teks.
- Setiap konstruktor mendapatkan tanda URI yang unik.
URItoKind<A>memetakan tanda ke tipe konkret.URISadalah gabungan semua tanda melaluikeyof.- Penggabungan deklarasi memungkinkan modul mendaftarkan wadah baru.
Berikutnya: mengemas pencarian tersebut sebagai pola Kind yang ringan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendefinisikan Konstruktor Jenis” gratis?
Ya — teks lengkap “Mendefinisikan Konstruktor Jenis” 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 “Mendefinisikan Konstruktor Jenis”?
Kodekan konstruktor jenis sebagai pencarian antarmuka. 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 2 dari 4.
Berapa lama pelajaran “Mendefinisikan Konstruktor Jenis” 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
- Masalah HKT dalam TypeScript
- Mendefinisikan Konstruktor Jenis
- Pola HKT Ringan
- Functor dan Mapper Generik