CodeBlanks Logo Icon CodeBlanks

Distributive conditional

Distribution özelliğini ve union'ları öğrenirsin.

Distributive conditional

Birleşim türü üzerinde koşullu tür kullanıldığında dağıtım gerçekleşir. Etiket<string | number>, her üye için ayrı ayrı değerlendirilir: Etiket<string> | Etiket<number>. Sonuç, her dalın birleşimidir.

type Etiket<T> =
  T extends string ? "metin" : "sayi";
type R = Etiket<string | number>;
// "metin" | "sayi"

Dağıtımın temeli

Dağıtım, koşullu türün sol tarafındaki tür parametresi birleşim olduğunda otomatik olur. Her üye için koşul ayrı değerlendirilir ve sonuçlar birleşir. Bu, birleşimden belirli türleri filtrelemek (Exclude, Extract) için temel mekanizmadır.

Uygulama Birleşimi etiketle

Etiket<T> koşullu türünü yaz: T extends string ? "metin" : "sayi". Sonuclar türünü Etiket<string | number> olarak tanımla. dizi değişkenini Sonuclar[] türünde tanımla ve ["metin", "sayi"] ata. dizi[0] ve dizi[1]'i ayrı satırlarda yazdır.

Başlangıç kodu

index.ts
// Etiket<T> koşullu türünü tanımla
// T string ise "metin", değilse "sayi"
// Sonuclar türünü Etiket<string | number> olarak tanımla
// dizi değişkenini Sonuclar[] türünde tanımla, ["metin", "sayi"] ata
// dizi[0] ve dizi[1]'i ayrı satırlarda yazdır

Örnek çözüm

index.ts
type Etiket<T> = T extends string ? "metin" : "sayi";
type Sonuclar = Etiket<string | number>;
const dizi: Sonuclar[] = ["metin", "sayi"];
console.log(dizi[0]);
console.log(dizi[1]);

Beklenen çıktı

metin
sayi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Etiket<string | number> dağıtıcı koşullu türle ne üretir?

index.ts
type Etiket<T> = T extends string ? "metin" : "sayi";
type R = Etiket<string | number>;
  • string | number
  • never
  • "metin"
  • "metin" | "sayi" Doğru cevap

Açıklama: Dağıtım her üyeyi ayrı değerlendirir: string için "metin", number için "sayi". Sonuç bu literal türlerin birleşimi olur. string | number veya never yanlış; yalnızca "metin" ise eksik.

2 Birleşim ile dağıtım

Soru
type Etiket<T> = T extends string ? "metin" : "sayi";
type R = Etiket<____>;
// R: "metin" | "sayi"
Cevap
type Etiket<T> = T extends string ? "metin" : "sayi";
type R = Etiket<string | number>;
// R: "metin" | "sayi"

Açıklama: Dağıtımın çalışıp birleşim üretmesi için tür parametresi birleşim olmalıdır. Yalnızca string tek dal verir; yalnızca number tek dal verir; string & number ise never'a indirgenir.

3 Dağıtıcı koşullu parçaları

Kavram Anlamı
Etiket<string | number> Dağıtıcı çağrı
Etiket<string> İlk üye değerlendirmesi
Etiket<number> İkinci üye değerlendirmesi
"metin" | "sayi" Dağıtım sonucu

Orta seviye bölümündeki tüm dersler