Generics (genel türler), farklı türlerle çalışan evrensel kod yazmayı sağlar ve katı tür güvenliğini korur.
Kullanım Söz Dizimi:
function identity<T>(value: T): T { return value; } const x = identity<string>('test'); // T = string
Nerelerde Kullanılır:
Tür kısıtlaması ile örnek:
function getFirst<T extends { length: number }>(arr: T): T { return arr[0]; }
Soru: Generic parametre ile fonksiyon çağırırken belirli bir türü belirtmek zorunlu mu?
Cevap:
Zorunlu değil. TypeScript, mümkünse iletilen değerlere göre türleri otomatik olarak çıkarır (çıkarım yapar). Ancak bazen belirteci netleştirmek faydalıdır; örneğin, değerlerden tür net değilse veya birden fazla seçenek varsa.
function identity<T>(value: T): T { return value; } identity(5); // T = number (otomatik) identity<string>('s'); // T = string (belirtilmiş)
Hikaye
E-ticaret projesinde farklı varlıklar için genel bir repository yazdık ama tür kısıtlamasını unuttuk. Sonuçta genel tür olarak herhangi bir nesne gelebiliyordu ve bir seferinde uyumsuz alanlarla bir varlık kaydettik. Türler hatadan korumadı.
Hikaye
Şablon fonksiyonuna bir dizi geçtik ve elemanların türünü beklüyorduk. Fakat fonksiyon any[] döndürdü, çünkü generic açıkça belirtilmemişti ve TypeScript türü çıkaramadı. Hata üretim ortamında ancak fark edildi.
Hikaye
Yenilikçi bir geliştirici, tür kısıtlaması olmadan bir genel sınıf oluşturdu, her türde olmayan bir alanı kullandı. Derleyici herhangi bir hata vermedi ama mevcut olmayan bir özelliğe erişildiğinde tüm işlevsellik bozuldu.