CodeBlanks Logo Icon CodeBlanks

Özet - infer

infer ile kendi Awaited ve ElementOf türlerini yazarsın.

Özet - infer

infer, koşullu türlerin extends yan tümcesinde tür değişkeni tanımlayarak bir türün içinden alt tür çıkarma sağlar. Promise<infer V> ile awaited değer türünü, (infer E)[] ile dizi eleman türünü çıkarırsın. Bu desenler, Awaited ve dizi yardımcılarının temelidir.

type Beklenen<T> =
  T extends Promise<infer V> ? V : T;
type Eleman<T> =
  T extends (infer E)[] ? E : never;

Uygulama Kendi Awaited ve Eleman türlerin

Beklenen<T> koşullu türünü yaz: T extends Promise<infer V> ? V : T. Eleman<T> koşullu türünü yaz: T extends (infer E)[] ? E : never. P türünü Beklenen<Promise<string>>, E türünü Eleman<number[]> olarak tanımla. a'yı P türünde "tamam", b'yi E türünde 7 ile tanımla. İkisini ayrı satırlarda yazdır.

Başlangıç kodu

index.ts
// Beklenen<T> koşullu türünü tanımla: Promise değerini çıkar
// Eleman<T> koşullu türünü tanımla: dizi elemanını çıkar
// P türünü Beklenen<Promise<string>> olarak tanımla
// E türünü Eleman<number[]> olarak tanımla
// a değişkenini P türünde tanımla, "tamam" ata
// b değişkenini E türünde tanımla, 7 ata
// a ve b'yi ayrı satırlarda yazdır

Örnek çözüm

index.ts
type Beklenen<T> = T extends Promise<infer V> ? V : T;
type Eleman<T> = T extends (infer E)[] ? E : never;
type P = Beklenen<Promise<string>>;
type E = Eleman<number[]>;
const a: P = "tamam";
const b: E = 7;
console.log(a);
console.log(b);

Beklenen çıktı

tamam
7

Soru ve cevaplar

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

1 Bir Promise'in değer türünü çıkarmak için hangi desen kullanılır?

index.ts
type Beklenen<T> = T extends Promise<infer V> ? V : T;
  • T extends Promise<V> ? V : T
  • T extends infer Promise ? T : never
  • T extends Promise<infer V> ? V : T Doğru cevap
  • T extends (infer V)[] ? V : never

Açıklama: Promise<infer V> kalıbı, Promise'in değer türünü V olarak çıkarır. İkinci seçenek dizi elemanı çıkarır; üçüncüsü V'yi tanımsız bırakır; sonuncusu sözdizimi hatasıdır.

2 Dizi elemanını çıkar

Soru
type Eleman<T> =
  T extends (____ E)[] ? E : never;
Cevap
type Eleman<T> =
  T extends (infer E)[] ? E : never;

Açıklama: Dizi eleman türünü çıkarmak için (infer E)[] kalıbı kullanılır. type, let ve new tür değişkeni tanımlamaz; yalnızca infer koşullu türün extends yan tümcesinde çıkarım yapar.

3 infer desenlerini eşleştir

Kavram Anlamı
Promise<infer V> Promise değer türünü çıkarır
(infer E)[] Dizi eleman türünü çıkarır
{ deger: infer V } Nesne özellik türünü çıkarır
? V / ? E Doğru dal: çıkarılan tür

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