CodeBlanks Logo Icon CodeBlanks

Özet - Conditional types

Koşullu türlerle bir tür filtresi yazarsın.

Özet - Conditional types

Koşullu türler, türe göre dallanan tür ifadeleridir. T extends U ? X : Y ile dallama, dağıtım ile birleşim filtreleme ve never ile eleman çıkarma bir arada kullanılarak tür filtreleri yazılabilir. Exclude ve Extract bu mekanizmalarla üretilir.

type MetinAl<T> =
  T extends string ? T : never;
type R = MetinAl<"a" | 1 | "b">;
// "a" | "b"

Uygulama Tür filtresi

MetinAl<T> koşullu türünü yaz: T extends string ? T : never. Metinler türünü MetinAl<"elma" | 42 | "armut"> olarak tanımla. dizi değişkenini Metinler[] türünde tanımla ve ["elma", "armut"] ata. dizi[0] ve dizi[1]'i ayrı satırlarda yazdır.

Başlangıç kodu

index.ts
// MetinAl<T> koşullu türünü tanımla
// T string ise T, değilse never
// Metinler türünü MetinAl<"elma" | 42 | "armut"> olarak tanımla
// dizi değişkenini Metinler[] türünde tanımla, ["elma", "armut"] ata
// dizi[0] ve dizi[1]'i ayrı satırlarda yazdır

Örnek çözüm

index.ts
type MetinAl<T> = T extends string ? T : never;
type Metinler = MetinAl<"elma" | 42 | "armut">;
const dizi: Metinler[] = ["elma", "armut"];
console.log(dizi[0]);
console.log(dizi[1]);

Beklenen çıktı

elma
armut

Soru ve cevaplar

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

1 Birleşimden yalnızca string üyeleri tutmak için hangi koşullu tür kullanılır?

index.ts
type MetinAl<T> = T extends string ? T : never;
type R = MetinAl<"a" | 1 | "b">;
  • T extends string ? T : never Doğru cevap
  • T extends number ? T : never
  • T extends string ? never : T
  • T extends string ? string : number

Açıklama: T extends string ? T : never, string üyeleri olduğu gibi tutar ve diğerlerini never yapar. İlk seçenek string'leri çıkarır; ikincisi türü değiştirir; sonuncusu number'ları tutar.

2 Tür filtresi gövdesi

Soru
type MetinAl<T> =
  T extends string ? ____ : never;
type R = MetinAl<"a" | 1 | "b">;
// R: "a" | "b"
Cevap
type MetinAl<T> =
  T extends string ? T : never;
type R = MetinAl<"a" | 1 | "b">;
// R: "a" | "b"

Açıklama: String üyeleri literal türleriyle tutmak için doğru dal T olmalıdır. never hepsini çıkarır; string literal türleri kaybeder; any tür güvenliğini bozar.

3 Koşullu tür mantığını eşleştir

Kavram Anlamı
T extends U ? X : Y Temel koşullu tür
T extends string ? T : never String üyeleri tutar
Dağıtıcı koşullu Birleşim üyelerini teker teker değerlendirir
MetinAl<"a" | 1> Filtrelenmiş tür örneği

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