Java veya C# gibi dillerde fonksiyonların ve yöntemlerin aşırı yüklenmesi standart bir özellik olarak bulunmaktadır: aynı isimde, ancak farklı parametrelerle birden fazla fonksiyon tanımlanabilir. JavaScript’te bu yoktur, bu da potansiyel hatalar ekler. TypeScript, bu sorunu türler düzeyinde çözmektedir.
TypeScript'te gerçek bir aşırı yüklenme (birden fazla uygulama) yoktur. Aynı fonksiyonu birden fazla imza ile tanımlayabilirsiniz, ancak yalnızca bir tane gerçek işlev uygulayabilirsiniz. Hatalar, tanımlanan imzaların ve uygulamanın senkronizasyonun kaybolması veya yanlış imza sıralamasından kaynaklanır.
TypeScript, birden fazla imza ardışık olarak tanımlanarak ve tüm aşırı yüklenme varyantlarıyla uyumlu tek bir gerçek uygulama ile fonksiyonların aşırı yüklenmesini destekler.
Kod örneği:
function sum(a: number, b: number): number; function sum(a: string, b: string): string; function sum(a: any, b: any): any { return a + b; } const a = sum(1, 2); // 3 const b = sum('foo', 'bar'); // "foobar"
Anahtar özellikler:
Aşırı yüklenme imzalarının tamamından önce fonksiyonun uygulamasını tanımlamak mümkün mü?
Hayır, önce aşırı yüklenme imzalarının tümü tanımlanmalı, ardından uygulama gelmelidir. Hata:
// Hata! Önce imzalar, sonra uygulama function foo(a: number): number { return a } // hata function foo(a: string): string { return a } // hata
TypeScript, tüm aşırı yüklenme imzalarında döndürülen değerleri kontrol eder mi?
TypeScript, yalnızca derleme aşamasında tanımlanan imzalara uygun türleri döndürmeyi garanti eder; çalışma sırasında tür kontrolü yapılmaz.
Tek bir uygulamada tüm giriş kombinasyonlarını kapsamak zorunda mı?
Uygulama fonksiyonu, aşırı yüklenme imzalarına göre tüm giriş kombinasyonlarını doğru bir şekilde işlemesi gerekir:
function parse(a: number): string; function parse(a: string): string; function parse(a: number | string): string { return String(a); }
Farklı giriş türleri ile birden fazla aşırı yüklenme tanımlanmış, ancak uygulama tüm durumları işlememekte ve nadir girişler için çalışma zamanı hatası vermektedir.
Artılar:
Eksiler:
Her aşırı yüklenme durumu uygulama içinde türler üzerinde bir koşul ile kapsanmaktadır, tür kontrolleri (typeof/instanceof) kullanılmaktadır.
Artılar:
Eksiler: