Özet - infer
- TypeScript kursu
- Orta seviye
- Ders 43/89
- 4 dk
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
// 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
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?
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
type Eleman<T> =
T extends (____ E)[] ? E : never;
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 |