TypeScript'te işlev aşırı yüklemesi, farklı türlerde ve/veya argüman sayılarında birden fazla işlev imzasının bildirilmesi ile elde edilir, ancak yalnızca bir uygulama ile.
Temel özellik: uygulama her zaman bir tanedir, ve derleyici çağrının bildirilen imzalardan birine uyup uymadığını kontrol eder.
function greet(person: string): string; function greet(person: string, age: number): string; function greet(person: string, age?: number): string { if (age !== undefined) { return `Hello, ${person}. You are ${age}!`; } else { return `Hello, ${person}!`; } } greet('Alice'); // 'Hello, Alice!' greet('Bob', 32); // 'Hello, Bob. You are 32!'
⚠️ C# veya Java'dan farklı olarak, birden fazla işlev uygulaması yoktur — tüm imzalar tek bir işlevle çözülür ve içeride zorunlu bir kontrol yapılır.
TypeScript'te her bir aşırı yüklenmiş imzayı ayrı bir işlev olarak uygulamak gerekiyor mu, C#'deki gibi?
Cevap: Hayır! TypeScript'te aşırı yüklenen işlev için yalnızca bir uygulama vardır. Tüm varyasyonlar, bir dizi imza bildirimi ile tanımlanır. Uygulama, bir işlev içinde farklı giriş parametrelerini işlemek zorundadır.
Hikaye
Bir projede, geliştirici aşırı yüklemeden yararlanmayı umarak, aynı isme sahip iki işlev tanımladı. Sonuç olarak, yalnızca son tanımlanan işlev çalıştı ve diğerleri "silindi". Bu, beklenmedik hatalara ve büyük yeniden yapılandırma sürelerine yol açtı.
Hikaye
Aşırı yüklenmiş işlevin uygulaması içinde türlerin doğru kontrolünü sağlamadılar. İşlev, müşterilerin beklediği türde olmayan değerler döndürmeye başladı; bu, TypeScript’in aşırı yüklemelerin uygulamasını doğrulamadığı için hata ayıklama zorluğuna yol açtı.
Hikaye
Yalnızca türler seviyesinde aşırı yükleme uygulaması yaptılar (imzaları tanımladılar), ancak çalışma zamanı uygulamasıyla uyumluluğu sağlamadılar (isteğe bağlı parametrelerin ve işlev içi işlemlerin eksikliği). Bu, "türe göre geçerli" parametrelerle çağrıldığında çöküşlere yol açtı çünkü çalışma zamanı bu seçenekleri desteklemiyordu.