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