CodeBlanks Logo Icon CodeBlanks

infer anahtar kelimesi

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

infer 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

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

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

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

Soru
type SarmaliAc<T> =
  T extends { deger: ____ V } ? V : never;
Cevap
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

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