spinny:~/writing $ vim advanced-typescript-patterns.md
1~2TypeScript, 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.3~4## 1. Generic Constraints5~6Generics güçlüdür, ancak bazen neyin geçirilebileceğini sınırlamanız gerekir. `extends` burada en iyi yardımcınızdır.7~8```typescript9interface HasId {10 id: string;11}12~13function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```17~18`T`'nin `HasId`'yi genişlettiğinden emin olarak, fonksiyon içinde `.id`'ye erişimin güvenli olduğunu garanti ediyoruz.19~20## 2. Conditional Types21~22Koşullu tipler, tek tip olmayan tip eşlemeleri oluşturmanıza olanak tanır. Sözdizimi JavaScript'teki üçlü operatöre benzer.23~24```typescript25type IsString<T> = T extends string ? true : false;26~27type A = IsString<string>; // true28type B = IsString<number>; // false29```30~31Pratik bir kullanım örneği, bir union'dan tipleri filtrelemektir:32~33```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```37~38## 3. Mapped Types39~40Mapped types, özellikleri dönüştürerek mevcut tiplere dayalı yeni tipler oluşturmanıza olanak tanır.41~42```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};46~47interface User {48 name: string;49 age: number;50}51~52type ReadOnlyUser = ReadOnly<User>;53```54~55Değiştiricileri ekleyebilir veya kaldırabilirsiniz:56~57```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```62~63## 4. Template Literal Types64~65TypeScript 4.1'de tanıtılan bu özellik, string tiplerini doğrudan manipüle etmenize olanak tanır.66~67```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"70~71type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';73~74type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```77~78Bu, CSS sınıfları veya olay adları gibi belirli bir kalıbı izleyen stringleri tiplemek için inanılmaz derecede kullanışlıdır.79~80## 5. `infer` Anahtar Kelimesi81~82Koşullu tipler içindeki `infer` anahtar kelimesi, diğer tiplerden tipleri çıkarmanıza olanak tanır.83~84```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;86~87function check(): boolean {88 return true;89}90~91type CheckReturn = ReturnType<typeof check>; // boolean92```93~94Burada TypeScript'ten bir fonksiyonun dönüş tipi `R`'yi "çıkarsamasını" ve döndürmesini istiyoruz.95~96## Sonuç97~98Bu 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~
NORMAL · advanced-typescript-patterns.md [readonly]99 lines · :q to close