0Pricing
TypeScript Academy · Pelajaran

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>>>; // string

Tipe 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[][][]>; // string

Inferensi 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>>>; // number

Tipe 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[][][]>; // number

Rekursi 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]>; // 3

Batas 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 chains

Infer 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 | boolean

Inferensi 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 = T extends Array ? Flatten : T?

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

  1. Memahami infer dalam Tipe Kondisional
  2. Membangun ReturnType dan Parameters dari Nol
  3. Pola Inferensi Bertingkat Dalam
  4. Kasus Penggunaan infer Praktis: Membuka Bungkus Promise
← Kembali ke TypeScript Academy