Dağıtmalı Koşullu Türler
Koşullu türlerin birleşimler üzerinde nasıl dağıtılacağını denetleyin.
Dağıtmalı Koşullu Türler, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. 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.
Şaşırtıcı Bir Davranış
Koşullu türlerin özel bir kuralı vardır: denetlenen tür bir çıplak tür parametresi olduğunda ve bir birleşim aktardığınızda, koşullu ifade her üyeye ayrı ayrı dağıtılır ve ardından sonuçlar birleştirilir.
Bu, Exclude, Extract ve birçok yardımcı türün temelini oluşturur.
type ToArray<T> = T extends unknown ? T[] : never;
type A = ToArray<string | number>;
// string[] | number[] (NOT (string | number)[])"Çıplak" Ne Anlama Gelir
"Çıplak", tür parametresinin extends'in solunda başka bir tür içine sarılmadan tek başına bulunması demektir. Dağıtım yalnızca çıplak parametrelerde gerçekleşir.
type Naked<T> = T extends string ? "y" : "n";
// T is naked -> distributes over unionsDağıtım Adım Adım
ToArray<string | number> için derleyici her üyeyi değerlendirir:
ToArray<string>= string[]ToArray<number>= number[]
Ardından bunları birleştirir: string[] | number[].
type R = ToArray<boolean>;
// boolean is true | false, so:
// true[] | false[]Birleşimi Filtreleme
Dağıtım, filtrelemeyi kolaylaştırır. İstenmeyen üyeleri never ile eşleyin; never, birleşimden kaybolur ve yalnızca tutulan üyeler kalır.
type Strings<T> = T extends string ? T : never;
type A = Strings<string | number | boolean>; // stringnever Birleşimlerde Yok Olur
Temel bir gerçek şudur: X | never ifadesi X olarak sadeleşir. Bu nedenle dağıtılmış bir dal never ürettiğinde, o üye nihai birleşimden etkili biçimde kaldırılır.
type A = string | never; // string
type B = "a" | never | "b"; // "a" | "b"Dağıtımı Devre Dışı Bırakma
Bazen dağıtımı istemezsiniz; örneğin bütün bir birleşimi tek bir birim olarak karşılaştırırken. Her iki tarafı da tek öğeli bir demete sarın: [T] extends [U]. Artık T çıplak değildir ve dağıtım devre dışı kalır.
type IsNever<T> = [T] extends [never] ? true : false;
type A = IsNever<never>; // true
type B = IsNever<string>; // falseSarmalama Neden İşe Yarar
[T] ifadesini sola yerleştirerek denetlenen türü yalın parametre olmaktan çıkarıp bir demet haline getirirsiniz. Özel dağıtım kuralı artık uygulanmaz ve birleşim bir bütün olarak sınanır.
type AllStrings<T> = [T] extends [string] ? true : false;
type A = AllStrings<"a" | "b">; // true
type B = AllStrings<"a" | number>; // falseDağıtılmış ve Dağıtılmamış
İki biçimi doğrudan karşılaştırın. Çıplak biçim her üyeyi denetler; sarılmış biçim ise birleşimi tek bir tür olarak denetler.
type Distributed<T> = T extends string ? true : false;
type Wrapped<T> = [T] extends [string] ? true : false;
type A = Distributed<string | number>; // boolean (true | false)
type B = Wrapped<string | number>; // falseExclude İç Yapısı
Yerleşik Exclude<T, U>, U'ya atanabilen üyeleri T'den kaldırır. Bu, eşleşen üyeleri never ile eşleyen dağıtıcı bir koşullu ifadeden ibarettir.
type MyExclude<T, U> = T extends U ? never : T;
type A = MyExclude<"a" | "b" | "c", "b">; // "a" | "c"Extract İç Yapısı
Extract<T, U> bunun ayna görüntüsüdür: yalnızca U'ya atanabilen üyeleri tutar. Dağıtım aynıdır, dallar tersidir.
type MyExtract<T, U> = T extends U ? T : never;
type A = MyExtract<"a" | "b" | "c", "a" | "c">; // "a" | "c"Pratik Güç
Dağıtım, tek bir ifadeyle birleşimin her üyesini dönüştürmenizi sağlar: her üye için diziler oluşturabilir, her dizenin başına bir önek ekleyebilir veya şekle göre filtreleyebilirsiniz. Tüm birleşimi denetlemek için [T] extends [U] ile birlikte kullanıldığında, dağıtımın tam olarak ne zaman gerçekleşeceğini denetlersiniz.
Gösterim: Gerçek TypeScript, şablon değişmez türlerini dolar-süslü parantez yer tutucuları içeren ve ters tırnaklarla sınırlandırılmış dizelerle yazar. Bu kod parçalarında bu kalıbı, her bölümü sırasıyla listeleyen Tpl<...> biçiminde gösteriyoruz; örneğin değişmez önekle eşleşen ve ardından Rest gelen bir ters tırnak şablonu Tpl<'prefix', infer Rest> olarak gösterilir.
type Prefix<T extends string> = T extends unknown ? Tpl<'id_', T> : never;
// Tpl<'id_', T> is the template literal type joining 'id_' with each T
type A = Prefix<'a' | 'b'>; // 'id_a' | 'id_b'Kısa Değerlendirme
Dağıtıcı koşullu türleri ne kadar anladığınızı sınayın.
Özet
Dağıtıcı koşullu türler, birleşim yardımcılarının temel mekanizmasıdır.
- Çıplak bir
T extends U ?ifadesi her birleşim üyesine dağıtılır. neverdöndüren dallar üyeleri filtreler.[T] extends [U], birleşimin tamamını denetlemek için dağıtımı devre dışı bırakır.ExcludeveExtract, küçük dağıtıcı koşullu ifadelerdir.
Sıradaki Kurs 22: tür sisteminde aritmetik.
Sıkça Sorulan Sorular
“Dağıtmalı Koşullu Türler” dersi ücretsiz mi?
Evet — “Dağıtmalı Koşullu Türler” 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.
“Dağıtmalı Koşullu Türler” dersinde ne öğreneceğim?
Koşullu türlerin birleşimler üzerinde nasıl dağıtılacağını denetleyin. 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 4. dersidir.
“Dağıtmalı Koşullu Türler” 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
- Hesaplama Dili Olarak Türler
- Tür Düzeyi Koşulluları
- Tür Düzeyi Özyineleme
- Dağıtmalı Koşullu Türler