Distributive conditional
- TypeScript kursu
- Orta seviye
- Ders 37/89
- 4 dk
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
// 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
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?
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
type Etiket<T> = T extends string ? "metin" : "sayi";
type R = Etiket<____>;
// R: "metin" | "sayi"
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 |