CodeBlanks Logo Icon CodeBlanks

Conditional type nedir?

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

index.ts
// 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

index.ts
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?

index.ts
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

Soru
type Etiket<T> =
  T ____ string ? "metin" : "sayi";
Cevap
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

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