Conditional type nedir?
- TypeScript kursu
- Orta seviye
- Ders 36/89
- 4 dk
Türe göre dallanan koşullu türleri öğrenirsin.
Conditional type nedir?
Koşullu tür, bir türe göre dallanan tür ifadesidir. T extends U ? X : Y sözdiziminde T, U'ya atanabiliyorsa tür X olur; atanamıyorsa Y olur. Bu, JavaScript'teki üçlü operatöre benzer ama tür düzeyinde çalışır ve derleme zamanında değerlendirilir.
type Etiket<T> =
T extends string ? "metin" : "sayi";
type A = Etiket<string>; // "metin"
type B = Etiket<number>; // "sayi"Derleme zamanı değerlendirmesi
Koşullu türler derleme zamanında değerlendirilir; çalışma zamanında iz bırakmazlar. Sonuç bir tür olduğundan, yalnızca tür konumlarında (değişken bildirimi, parametre, dönüş) kullanılabilir. Değer olarak kullanılamaz; console.log(Etiket<number>) gibi bir çağrı geçersizdir.
Uygulama Etiket türü
Etiket<T> koşullu türünü yaz: T extends string ? "metin" : "sayi". a değişkenini Etiket<string> türünde tanımla ve "metin" ata. b değişkenini Etiket<number> türünde tanımla ve "sayi" ata. Her ikisini de console.log ile ayrı satırlarda yazdır.
Başlangıç kodu
// Etiket<T> koşullu türünü tanımla
// T string ise "metin", değilse "sayi"
// a değişkenini Etiket<string> türünde tanımla, "metin" ata
// b değişkenini Etiket<number> türünde tanımla, "sayi" ata
// her ikisini ayrı satırlarda yazdırÖrnek çözüm
type Etiket<T> = T extends string ? "metin" : "sayi";
const a: Etiket<string> = "metin";
const b: Etiket<number> = "sayi";
console.log(a);
console.log(b);Beklenen çıktı
metin sayi
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aşağıdaki koşullu türde Etiket<number> ne olur?
type Etiket<T> = T extends string ? "metin" : "sayi";
type R = Etiket<number>;- never
- "metin"
- "sayi" Doğru cevap
- number
Açıklama: number, string'e atanamadığından koşul false olur ve sonuç "sayi" literal türü çıkar. "metin" doğru olan dal; number ve never ise yanlış çıkarımlardır.
2 Koşul ekle
type Etiket<T> =
T ____ string ? "metin" : "sayi";
type Etiket<T> =
T extends string ? "metin" : "sayi";
Açıklama: Koşullu türde sorgulama için extends kullanılır. implements sınıflar içindir; instanceof değer kontrolüdür; is TypeScript'te burada anahtar kelime değildir.
3 Koşullu tür parçaları
| Kavram | Anlamı |
|---|---|
T extends U |
Koşul ifadesi |
? X |
Koşul doğruysa tür |
: Y |
Koşul yanlışsa tür |
Etiket<string> |
Kullanım örneği |