CodeBlanks Logo Icon CodeBlanks

Promise'ten değer çıkarma

infer ile Promise'in değer türünü öğrenirsin.

Promise'ten değer çıkarma

Promise<infer V> kalıbı, bir Promise'in değer türünü V olarak çıkarır. T extends Promise<infer V> ? V : T deseni, T bir Promise'se değer türünü verir; değilse T'yi olduğu gibi döndürür. Bu, Awaited utility type'ının temelidir.

type Deger<T> =
  T extends Promise<infer V> ? V : T;
type R = Deger<Promise<number>>;
// R: number

Promise olmayan türler

Deger<T>, T bir Promise değilse yanlış dala düşer ve T'yi olduğu gibi döndürür. Örneğin Deger<number>, number verir. Bu davranış, hem Promise hem Promise olmayan türlerle çalışan esnek yardımcılar yazmayı sağlar.

Uygulama Promise değer türünü çıkar

Deger<T> koşullu türünü yaz: T extends Promise<infer V> ? V : T. Sonuc türünü Deger<Promise<number>> olarak tanımla. a değişkenini Sonuc türünde tanımla ve 42 ata. a'yı console.log ile yazdır.

Başlangıç kodu

index.ts
// Deger<T> koşullu türünü tanımla
// T bir Promise ise değer türünü çıkar, değilse T'yi döndür
// Sonuc türünü Deger<Promise<number>> olarak tanımla
// a değişkenini Sonuc türünde tanımla, 42 ata
// a'yı console.log ile yazdır

Örnek çözüm

index.ts
type Deger<T> = T extends Promise<infer V> ? V : T;
type Sonuc = Deger<Promise<number>>;
const a: Sonuc = 42;
console.log(a);

Beklenen çıktı

42

Soru ve cevaplar

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

1 Deger<Promise<string>> ne üretir?

index.ts
type Deger<T> = T extends Promise<infer V> ? V : T;
type R = Deger<Promise<string>>;
  • Promise<string>
  • any
  • never
  • string Doğru cevap

Açıklama: T bir Promise olduğundan kalıp eşleşir ve V, Promise'in değer türü olan string olur. Doğru dal V'yi döndürür. Promise<string> yanlış dal; never ve any bu durumda geçersiz.

2 Promise değerini çıkar

Soru
type Deger<T> =
  T extends Promise<____ V> ? V : T;
Cevap
type Deger<T> =
  T extends Promise<infer V> ? V : T;

Açıklama: Promise'in değer türünü çekmek için Promise<infer V> kalıbı kullanılır. type, let ve const değer/tür bildirimi içindir; new bir ifade operatörüdür; infer ile çıkarım yapılır.

3 Promise infer parçaları

Kavram Anlamı
Promise<infer V> Promise değer türünü yakalar
? V Doğru dal: değer türü
: T Yanlış dal: T olduğu gibi
Deger<Promise<number>> Kullanım örneği

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