spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript, büyük ölçekli web geliştirme için endüstri standardı haline geldi. Çoğu geliştirici arayüzlerin ve tiplerin temellerini bilse de, gerçek güç ileri düzey tip sisteminde yatar. İşte sizi kıdemli bir mühendis olarak öne çıkaracak 5 kalıp.34## 1. Generic Constraints56Generics güçlüdür, ancak bazen neyin geçirilebileceğini sınırlamanız gerekir. `extends` burada en iyi yardımcınızdır.78```typescript9interface HasId {10 id: string;11}1213function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```1718`T`'nin `HasId`'yi genişlettiğinden emin olarak, fonksiyon içinde `.id`'ye erişimin güvenli olduğunu garanti ediyoruz.1920## 2. Conditional Types2122Koşullu tipler, tek tip olmayan tip eşlemeleri oluşturmanıza olanak tanır. Sözdizimi JavaScript'teki üçlü operatöre benzer.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Pratik bir kullanım örneği, bir union'dan tipleri filtrelemektir:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Mapped Types3940Mapped types, özellikleri dönüştürerek mevcut tiplere dayalı yeni tipler oluşturmanıza olanak tanır.4142```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};4647interface User {48 name: string;49 age: number;50}5152type ReadOnlyUser = ReadOnly<User>;53```5455Değiştiricileri ekleyebilir veya kaldırabilirsiniz:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465TypeScript 4.1'de tanıtılan bu özellik, string tiplerini doğrudan manipüle etmenize olanak tanır.6667```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"7071type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';7374type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```7778Bu, CSS sınıfları veya olay adları gibi belirli bir kalıbı izleyen stringleri tiplemek için inanılmaz derecede kullanışlıdır.7980## 5. `infer` Anahtar Kelimesi8182Koşullu tipler içindeki `infer` anahtar kelimesi, diğer tiplerden tipleri çıkarmanıza olanak tanır.8384```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;8687function check(): boolean {88 return true;89}9091type CheckReturn = ReturnType<typeof check>; // boolean92```9394Burada TypeScript'ten bir fonksiyonun dönüş tipi `R`'yi "çıkarsamasını" ve döndürmesini istiyoruz.9596## Sonuç9798Bu kalıplara hakim olmak, sağlam ve mükemmel geliştirici deneyimi (DX) sunan kütüphaneler ve yardımcı araçlar yazmanıza olanak tanır. İleri düzey TypeScript'in amacı karmaşıklık uğruna karmaşıklık değil, güvenlik ve ifade gücüdür.99
:Kıdemli Mühendisler İçin 5 İleri Düzey TypeScript Kalıbılines 1-99 (END) — press q to close