Geri

TypeScript’te `infer` Yapısını Anlamak

TypeScript’teki `infer` anahtar sözcüğü, koşullu tipler içinde bir tipi çıkarmak ve isimlendirmek için kullanılır. Genellikle tipleri sarmak veya dönüştürmek amacıyla kullanılır.

`infer` sayesinde, bir tipin belirli bölümlerini—örneğin dönüş değerleri, tuple elemanları veya string parçaları—tip değerlendirmesi sırasında dinamik olarak yakalayabilirsiniz.

`infer` ile Dönüş Tipi Çıkarmak

`infer` kullanımının klasik örneği, bir fonksiyonun dönüş tipini çıkarmaktır. Bu, dönüş tipini elle belirtme ihtiyacını ortadan kaldırır ve tutarlılık sağlar.

type GetReturnType<T> =
    T extends (...args: any[]) => infer R ? R : never;
  
  type Example = GetReturnType<() => number>; // number

kebab-case'ten camelCase'e Dönüştürme

`infer`, bir string tipi `-` karakterine göre ayırarak `Capitalize` ile `camelCase` dönüşümü yapabilir. Bu, literal string union'ları üzerinde dönüşümler yapmayı mümkün kılar.

type ConvertType = 'primary-variant' | 'secondary-variant';
  type ToCamelCase<T extends string> =
    T extends `${infer First}-${infer Second}`
      ? `${First}${Capitalize<Second>}`
      : T;
  
  type Result = ToCamelCase<ConvertType>; 
  // 'primaryVariant' | 'secondaryVariant'

İç İçe kebab-case String’leri İşlemek

Özyinelemeli koşullu tipler ve `infer` kullanarak çok parçalı kebab-case string’leri iç içe camelCase formatlarına dönüştürebiliriz.

type ConvertType2 = 'primary-primaryt-variant' | 'test-test-test';
  
  type ToCamelRecursive<T extends string> =
    T extends `${infer First}-${infer Rest}`
      ? `${First}${Capitalize<ToCamelRecursive<Rest>>}`
      : T;
  
  type Result = ToCamelRecursive<ConvertType2>;
  // 'primaryPrimarytVariant' | 'testTestTest'

Bir Diziyi `infer` ile Tersine Çevirmek

`infer` tuple’larla da çalışır! Özyineleme kullanarak bir dizi tipini tamamen derleme zamanında tersine çevirebilirsiniz.

type ArrayReverse<T extends unknown[]> =
    T extends [infer First, ...infer Rest]
      ? [...ArrayReverse<Rest>, First]
      : T;
  
  type Reversed = ArrayReverse<[1, 2, 3]>;
  // [3, 2, 1]

Sonuç

`infer`, TypeScript’te gelişmiş desen eşleştirme mantığının kapısını açar ve son derece esnek, yeniden kullanılabilir yardımcı tipler oluşturmanıza olanak tanır.

İleri düzey tip seviyesinde programlama yapan her geliştirici için `infer` temel bir araçtır.

Geri