Pola Inferensi Bertingkat Dalam
Terapkan infer secara rekursif untuk mengekstrak tipe kompleks.
Pola Inferensi Bertingkat Dalam adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Mengapa Inferensi Mendalam?
Terkadang tipe yang Anda inginkan tersembunyi di dalam beberapa lapisan generik. Inferensi mendalam menggunakan tipe kondisional rekursif atau berantai untuk menjangkaunya.
type DeepUnwrap<T> =
T extends Promise<infer U>
? DeepUnwrap<U>
: T;
type A = DeepUnwrap<Promise<Promise<string>>>; // stringTipe Kondisional Rekursif
TypeScript 4.1+ mendukung tipe kondisional rekursif, sehingga Anda dapat mengupas lapisan pembungkus satu per satu.
type Flatten<T> = T extends Array<infer U> ? Flatten<U> : T;
type B = Flatten<string[][][]>; // stringInferensi dari Generik Bertingkat
Anda dapat merangkai beberapa variabel infer dalam satu klausa extends untuk menangkap beberapa lapisan sekaligus.
type InnerValue<T> =
T extends Map<any, infer V>
? V extends Set<infer S>
? S
: V
: T;
type C = InnerValue<Map<string, Set<number>>>; // numberTipe Properti Objek yang Mendalam
Tipe rekursif dapat menelusuri bentuk objek untuk mengekstrak tipe properti yang sangat bertingkat.
type DeepGet<T, K extends keyof T> =
T[K] extends object ? T[K] : never;
type Nested = { user: { profile: { name: string } } };
type Profile = DeepGet<Nested, "user">; // { profile: { name: string } }Mengekstrak Tipe Elemen Array Secara Mendalam
Menggabungkan penguraian pembungkus secara rekursif dengan penanganan array mencakup kedalaman penyarangan apa pun.
type ElementType<T> = T extends (infer U)[] ? ElementType<U> : T;
type D = ElementType<number[][][]>; // numberRekursi Ekor Tuple
Manipulasi tuple berekursi ekor adalah pola umum untuk alur pemrosesan yang aman terhadap tipe dan tipe komposisi fungsi.
type Last<T extends any[]> =
T extends [...infer _, infer L] ? L : never;
type E = Last<[1, 2, 3]>; // 3Batas Kedalaman dan Pertimbangan Praktis
TypeScript membatasi kedalaman rekursi untuk mencegah perulangan tanpa akhir. Jaga rekursi tetap dangkal dan pertimbangkan untuk membatasinya dengan penghitung kedalaman bila diperlukan.
// Deep recursion may hit "Type instantiation is excessively deep"
// Simplify or use branded types to break deep chainsInfer dalam Distribusi Gabungan
Saat T berupa gabungan, tipe kondisional didistribusikan: setiap anggota dicocokkan secara terpisah dan hasilnya digabungkan sebagai gabungan.
type Unwrap<T> = T extends Promise<infer U> ? U : T;
type F = Unwrap<Promise<string> | Promise<number> | boolean>;
// string | number | booleanInferensi Tuple Rest
Pola tuple rest dengan infer memungkinkan dekomposisi bagian awal dan akhir serta manipulasi tipe variadik.
type Init<T extends any[]> =
T extends [...infer I, any] ? I : never;
type G = Init<[1, 2, 3, 4]>; // [1, 2, 3]Contoh Dunia Nyata: Respons API Bertingkat
Tipe respons API bertingkat dapat diurai hingga menjadi tipe datanya menggunakan infer berantai.
type ApiResponse<T> = { data: T; status: number };
type UnwrapApi<T> = T extends ApiResponse<infer D> ? D : T;
type H = UnwrapApi<ApiResponse<{ users: string[] }>>; // { users: string[] }Rangkuman: Inferensi Mendalam
Inferensi mendalam menggabungkan tipe kondisional rekursif, beberapa variabel infer, dan pencocokan pola struktural untuk mengekstrak tipe dari struktur generik bertingkat dengan kedalaman apa pun.
Pemeriksaan Cepat
Apa hasil Flatten jika Flatten?
Yang Anda Pelajari
Inferensi yang sangat bertingkat menggunakan tipe kondisional rekursif dan pola infer berantai untuk menjangkau tipe yang tersembunyi di dalam beberapa pembungkus generik. Batasi rekursi agar tidak melampaui batas kedalaman TypeScript.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Inferensi Bertingkat Dalam” gratis?
Ya — teks lengkap “Pola Inferensi Bertingkat Dalam” 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 “Pola Inferensi Bertingkat Dalam”?
Terapkan infer secara rekursif untuk mengekstrak tipe kompleks. 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 3 dari 4.
Berapa lama pelajaran “Pola Inferensi Bertingkat Dalam” 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
- Memahami infer dalam Tipe Kondisional
- Membangun ReturnType dan Parameters dari Nol
- Pola Inferensi Bertingkat Dalam
- Kasus Penggunaan infer Praktis: Membuka Bungkus Promise