Conditional ile mantık
- TypeScript kursu
- Orta seviye
- Ders 38/89
- 4 dk
Koşullu türlerle tür seviyesinde mantık kurmayı öğrenirsin.
Conditional ile mantık
Koşullu türlerle tür seviyesinde mantık kurabilirsin. T extends U ? never : T deseni, T'nin U'ya atanabilen üyelerini birleşimden çıkarır; bu Exclude'ün temelidir. Tersine T extends U ? T : never, yalnızca U'ya atanabilenleri tutar; bu Extract'in temelidir.
type Cikar<T, U> =
T extends U ? never : T;
type R = Cikar<"a" | "b", "b">;
// "a"never birleşimden kaybolur
Dağıtıcı koşullu türlerle never birleşimde kaybolur. "a" | never | "c" = "a" | "c". Bu sayede filtreleme mantığı doğal olarak çalışır: koşulu sağlamayanlar never olur ve sonuçtan düşer.
Uygulama Birleşimden çıkar
Cikar<T, U> koşullu türünü yaz: T extends U ? never : T. Kalan türünü Cikar<"a" | "b" | "c", "b"> olarak tanımla. dizi değişkenini Kalan[] türünde tanımla ve ["a", "c"] ata. dizi[0] ve dizi[1]'i ayrı satırlarda yazdır.
Başlangıç kodu
// Cikar<T, U> koşullu türünü tanımla
// T, U'ya atanabilirsa never, değilse T
// Kalan türünü Cikar<"a" | "b" | "c", "b"> olarak tanımla
// dizi değişkenini Kalan[] türünde tanımla, ["a", "c"] ata
// dizi[0] ve dizi[1]'i ayrı satırlarda yazdırÖrnek çözüm
type Cikar<T, U> = T extends U ? never : T;
type Kalan = Cikar<"a" | "b" | "c", "b">;
const dizi: Kalan[] = ["a", "c"];
console.log(dizi[0]);
console.log(dizi[1]);Beklenen çıktı
a c
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Cikar<"a" | "b" | "c", "b"> ne üretir?
type Cikar<T, U> = T extends U ? never : T;
type R = Cikar<"a" | "b" | "c", "b">;- "b"
- "a" | "c" Doğru cevap
- "a" | "b" | "c"
- never
Açıklama: Dağıtım her üyeyi ayrı değerlendirir: "a" ve "c" U'ya atanamadığından kalır, "b" atanabildiğinden never olur ve birleşimden düşer. Sonuç "a" | "c".
2 Filtre için never kullan
type Cikar<T, U> =
T extends U ? ____ : T;
type R = Cikar<"a" | "b", "b">;
// R: "a"
type Cikar<T, U> =
T extends U ? never : T;
type R = Cikar<"a" | "b", "b">;
// R: "a"
Açıklama: U'ya atanabilen üyeleri çıkarmak için never kullanılır. any veya unknown filtreyi bozar; T ise hiçbir şeyi çıkarmaz.
3 Mantık desenleri
| Kavram | Anlamı |
|---|---|
T extends U ? never : T |
U'ya atanabilenleri çıkarır |
T extends U ? T : never |
U'ya atanabilenleri tutar |
never |
Birleşimden kaybolur |
"a" | never | "c" |
"a" | "c"'ye eşittir |