CodeBlanks Logo Icon CodeBlanks

Dizi eleman türü

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: string

Parantezlerin ö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

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

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

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

Soru
type Eleman<T> =
  T extends (infer E)____ ? E : never;
Cevap
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

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