Özet - Conditional types
- TypeScript kursu
- Orta seviye
- Ders 39/89
- 4 dk
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
// 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
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?
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
type MetinAl<T> =
T extends string ? ____ : never;
type R = MetinAl<"a" | 1 | "b">;
// R: "a" | "b"
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 |