Dizi eleman türü
- TypeScript kursu
- Orta seviye
- Ders 42/89
- 4 dk
infer ile dizinin eleman türünü çıkarmayı öğrenirsin.
Dizi eleman türü
(infer E)[] kalıbı, bir dizinin eleman türünü E olarak çıkarır. T extends (infer E)[] ? E : never deseni, T bir diziysenin eleman türünü verir. Bu, generic yardımcılarda dizi eleman türünü bilmek gereken durumlarda işe yarar.
type Eleman<T> =
T extends (infer E)[] ? E : never;
type R = Eleman<string[]>;
// R: stringParantezlerin önemi
(infer E)[] yazımında parantezler zorunludur. infer E[] yazılırsa bu, E adında bir eleman türleri dizisi bildirmeye çalışır ve sözdizimi hatası verir. Parantezler, önce E'nin çıkarılacağını, sonra dizi olma koşulunun uygulanacağını belirtir.
Uygulama Dizi eleman türünü çıkar
Eleman<T> koşullu türünü yaz: T extends (infer E)[] ? E : never. Sonuc türünü Eleman<string[]> olarak tanımla. a değişkenini Sonuc türünde tanımla ve "elma" ata. a'yı console.log ile yazdır.
Başlangıç kodu
// Eleman<T> koşullu türünü tanımla
// T bir dizi ise eleman türünü çıkar, değilse never
// Sonuc türünü Eleman<string[]> olarak tanımla
// a değişkenini Sonuc türünde tanımla, "elma" ata
// a'yı console.log ile yazdırÖrnek çözüm
type Eleman<T> = T extends (infer E)[] ? E : never;
type Sonuc = Eleman<string[]>;
const a: Sonuc = "elma";
console.log(a);Beklenen çıktı
elma
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Eleman<number[]> ne üretir?
type Eleman<T> = T extends (infer E)[] ? E : never;
type R = Eleman<number[]>;- number Doğru cevap
- never
- any[]
- number[]
Açıklama: T bir dizi olduğundan kalıp eşleşir ve E, eleman türü olan number olur. Doğru dal E'yi döndürür. number[] eşleşen türün kendisi; never yanlış dal; any[] ise çıkarım sonucu değildir.
2 Dizi parantezlerini ekle
type Eleman<T> =
T extends (infer E)____ ? E : never;
type Eleman<T> =
T extends (infer E)[] ? E : never;
Açıklama: Eleman türünü çıkardıktan sonra dizi koşulunu belirtmek için [] kullanılır. {} nesne türüdür; [T] tuple belirtir; E ise tek başına dizi koşulu kurmaz.
3 Dizi infer parçaları
| Kavram | Anlamı |
|---|---|
(infer E) |
Çıkarılan eleman türü |
(infer E)[] |
Dizi eşleşme kalıbı |
? E |
Doğru dal: eleman türü |
Eleman<string[]> |
Kullanım örneği |