0Pricing
TypeScript Academy · Ders

İç İçe Derin Çıkarım Örüntüleri

Karmaşık tür çıkarımı için infer'i yinelemeli olarak uygulayın

İç İçe Derin Çıkarım Örüntüleri, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Derin Tür Çıkarma Neden Gereklidir

Bazen istediğiniz tür, birkaç genel tür katmanının içinde gömülü olur. Derin tür çıkarma, bu türe ulaşmak için özyinelemeli veya zincirlenmiş koşullu türler kullanır.

type DeepUnwrap<T> =
  T extends Promise<infer U>
    ? DeepUnwrap<U>
    : T;

type A = DeepUnwrap<Promise<Promise<string>>>; // string

Özyinelemeli Koşullu Türler

TypeScript 4.1 ve sonraki sürümler, sarmalayıcı katmanlarını tek tek soymanıza olanak tanıyan özyinelemeli koşullu türleri destekler.

type Flatten<T> = T extends Array<infer U> ? Flatten<U> : T;
type B = Flatten<string[][][]>; // string

İç İçe Genel Türlerden Tür Çıkarma

Aynı anda birden fazla katmanı yakalamak için tek bir extends yan tümcesinde birden çok tür çıkarma değişkenini zincirleyebilirsiniz.

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

Derin Nesne Özellik Türleri

Özyinelemeli türler, derinlerde iç içe bulunan özellik türlerini çıkarmak için nesne biçimleri arasında ilerleyebilir.

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 } }

Dizi Öğe Türlerini Derinlemesine Çıkarma

Özyinelemeli sarmalayıcıdan çıkarma işlemini dizi işleme ile birleştirmek, her derinlikteki iç içe yapıları kapsar.

type ElementType<T> = T extends (infer U)[] ? ElementType<U> : T;
type D = ElementType<number[][][]>; // number

Demet Kuyruğunda Özyineleme

Kuyruk özyinelemeli demet işleme, tür güvenli işlem hatları ve işlev bileşimi türleri için yaygın bir kalıptır.

type Last<T extends any[]> =
  T extends [...infer _, infer L] ? L : never;
type E = Last<[1, 2, 3]>; // 3

Derinlik Sınırları ve Pratik Hususlar

TypeScript, sonsuz döngüleri önlemek için özyineleme derinliğini sınırlar. Özyinelemeyi sığ tutun ve gerektiğinde derinlik sayacıyla bir üst sınır belirlemeyi düşünün.

// Deep recursion may hit "Type instantiation is excessively deep"
// Simplify or use branded types to break deep chains

Birleşim Dağıtımında Tür Çıkarma

Bir tür birleşim olduğunda koşullu türler dağıtılır: her üye ayrı ayrı eşleştirilir ve sonuçlar birleşim olarak birleştirilir.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type F = Unwrap<Promise<string> | Promise<number> | boolean>;
// string | number | boolean

Kalan Demetleri Çıkarma

Tür çıkarma içeren kalan demet desenleri, baş ve kuyruk ayrıştırmasını ve değişken sayılı tür işlemlerini mümkün kılar.

type Init<T extends any[]> =
  T extends [...infer I, any] ? I : never;
type G = Init<[1, 2, 3, 4]>; // [1, 2, 3]

Gerçek Dünya Örneği: İç İçe API Yanıtı

İç içe bir API yanıtı türü, zincirlenmiş tür çıkarma kullanılarak veri türüne kadar sarmalayıcılardan çıkarılabilir.

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[] }

Özet: Derin Tür Çıkarma

Derin tür çıkarma; özyinelemeli koşullu türleri, birden çok tür çıkarma değişkenini ve yapısal desen eşleştirmeyi birleştirerek, rastgele derinlikte iç içe bulunan genel tür yapılarından türler çıkarmanızı sağlar.

Hızlı Kontrol

Flatten, Flatten = T extends Array ? Flatten : T ise ne döndürür?

Öğrendikleriniz

Derinlerde iç içe bulunan tür çıkarma, birden çok genel tür sarmalayıcısının içine gömülmüş türlere ulaşmak için özyinelemeli koşullu türleri ve zincirlenmiş tür çıkarma kalıplarını kullanır. TypeScript derinlik sınırlarından kaçınmak için özyinelemeyi sınırlı tutun.

Sıkça Sorulan Sorular

“İç İçe Derin Çıkarım Örüntüleri” dersi ücretsiz mi?

Evet — “İç İçe Derin Çıkarım Örüntüleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“İç İçe Derin Çıkarım Örüntüleri” dersinde ne öğreneceğim?

Karmaşık tür çıkarımı için infer'i yinelemeli olarak uygulayın TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“İç İçe Derin Çıkarım Örüntüleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Koşullu Türlerde infer'i Anlama
  2. ReturnType ve Parameters'ı Sıfırdan Oluşturma
  3. İç İçe Derin Çıkarım Örüntüleri
  4. Uygulamalı infer Kullanım Alanları: Promise'leri Açma
← TypeScript Academy Sayfasına Dön