infer anahtar kelimesi
- TypeScript kursu
- Orta seviye
- Ders 40/89
- 4 dk
infer ile türleri çekmeyi öğrenirsin.
infer anahtar kelimesi
infer, koşullu türün extends yan tümcesinde yeni bir tür değişkeni tanımlar. Bu değişken, eşleşen türün bir parçasını yakalar ve koşulun doğru dalında kullanılabilir. Böylece bir türün içinden alt tür çıkarabilirsin.
type SarmaliAc<T> =
T extends { deger: infer V } ? V : never;
type R = SarmaliAc<{ deger: string }>;
// R: stringinfer nerede çalışır?
infer yalnızca koşullu türlerin extends yan tümcesinde geçerlidir; başka yerde kullanılamaz. Tanımlanan tür değişkeni yalnızca koşulun doğru ve yanlış dallarında görünür. Bu mekanizma, Promise değer türü, dizi eleman türü veya fonksiyon dönüş türü gibi yapısal çıkarımlar için temeldir.
Uygulama Sarmalı aç
SarmaliAc<T> koşullu türünü yaz: T extends { deger: infer V } ? V : never. Sonuc türünü SarmaliAc<{ deger: string }> olarak tanımla. a değişkenini Sonuc türünde tanımla ve "merhaba" ata. a'yı console.log ile yazdır.
Başlangıç kodu
// SarmaliAc<T> koşullu türünü tanımla
// T { deger: V } kalıbına uyuyorsa V'yi çıkar, değilse never
// Sonuc türünü SarmaliAc<{ deger: string }> olarak tanımla
// a değişkenini Sonuc türünde tanımla, "merhaba" ata
// a'yı console.log ile yazdırÖrnek çözüm
type SarmaliAc<T> = T extends { deger: infer V } ? V : never;
type Sonuc = SarmaliAc<{ deger: string }>;
const a: Sonuc = "merhaba";
console.log(a);Beklenen çıktı
merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aşağıdaki türde SarmaliAc<{ deger: number }> ne üretir?
type SarmaliAc<T> = T extends { deger: infer V } ? V : never;
type R = SarmaliAc<{ deger: number }>;- any
- number Doğru cevap
- { deger: number }
- never
Açıklama: T, { deger: infer V } kalıbına uyduğunda V, deger özelliğinin türü olan number olur ve doğru dal V'yi döndürür. never yalnızca eşleşmeme durumunda; any ise hiçbir zaman otomatik çıkarım sonucu değildir.
2 infer ile tür değişkeni tanımla
type SarmaliAc<T> =
T extends { deger: ____ V } ? V : never;
type SarmaliAc<T> =
T extends { deger: infer V } ? V : never;
Açıklama: Koşullu türün extends yan tümcesinde tür değişkeni tanımlamak için infer kullanılır. type, let ve const değer/tür bildirimi için ayrılmıştır; infer ile çıkarım yapılamaz.
3 infer parçaları
| Kavram | Anlamı |
|---|---|
infer V |
Çıkarılan tür değişkeni |
{ deger: infer V } |
Eşleşme kalıbı |
? V |
Doğru dal: çıkarılan tür |
SarmaliAc<{ deger: string }> |
Kullanım örneği |