TypeScript, rest parametreleri ve yapısal ayırma (destructuring) kullanarak fonksiyonların kesin türlendirilmesini desteklemektedir. Bu, değişken sayıda argüman alan veya karmaşık nesnelerle çalışan fonksiyonlar için özellikle önemlidir.
Fonksiyon parametrelerinde yapısal ayırma, beklenen özelliklerin yapısını açıkça belirtmeyi sağlar:
function printUser({ name, age }: { name: string; age: number }) { console.log(`${name} (${age})`); }
Rest parametreleri, değişken sayıda argümanın türünü belirtmeyi mümkün kılar:
function sum(...numbers: number[]): number { return numbers.reduce((acc, cur) => acc + cur, 0); }
Kombine kullanımlar, ana nesnenin ve ek bir parametreler dizisinin alındığı fonksiyonlarda görülür:
function logEvent(event: { type: string }, ...meta: any[]) { console.log(event.type, meta.join(',')); }
Doğru türlendirme, kodun yürütülmesinden önce hataların belirlenmesini sağlar, ancak yanlış türlendirme, tür güvenliğinin kaybolmasına ve çalışma zamanında hatalara neden olur.
Varsayılan olarak dizi parametrelerine tür atamak ve bunları isteğe bağlı (optional) hale getirmek için nasıl bir yol izlenir?
Birçok kişi nesnenin türünü belirtirken her bir alanı isteğe bağlı hale getirmeyi veya varsayılan değerleri aynı anda türle belirtmeyi unutur:
function foo({x = 1, y = 2}: {x?: number; y?: number} = {}) { console.log(x, y); }
Burada varsayılan değerler belirlenmiştir ve tüm parametreler ? ile isteğe bağlı hale getirilmiştir. Bunu yapmadan parametre olmadan çağırmak hata verecektir, oysa varsayılan değer beklenmektedir.
Hikaye
undefined üzerinde name özelliği olmadığı için uygulamanın çökmesine neden olmuştur.Hikaye
any[] olarak belirlendiği için sayılar dışında değerlerin geçmesine izin verildi. Üretimde, birdenbire sayılar ve stringler toplandı ve raporlarda yanlış sonuçlar elde edildi.Hikaye
Derin yapılandırılmış bir nesne ile yapısal ayırma kullandık, ancak iç türleri belirtmedik. Bunun sonucunda TS "kayboldu" ve nesnelerde zorunlu alanların eksikliğini belirlemedi; bu da istemcide TypeError: Cannot read property 'id' of undefined hatasına yol açtı.