Genel olarak aşırı fonksiyon yüklemesi nedir?
Fonksiyon aşırı yükleme veya metot aşırı yükleme yaratma yeteneği olan birden fazla işlevi içinde aynı adı ile farklı uygulamaları ( Vikipedi )
JS'de aşırı işlev yüklemesi nedir?
Bu özellik JS'de mümkün değildir - birden fazla bildirim olması durumunda en son tanımlanan işlev alınır:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... ve TS'de mi?
Aşırı yükler , JS çalışma zamanı üzerinde etkisi olmayan bir derleme zamanı yapısıdır:
function foo(s: string): string // overload #1 of foo
function foo(s: string, n: number): number // overload #2 of foo
function foo(s: string, n?: number): string | number {/* ... */} // foo implementation
Yukarıdaki kodu (JS'den daha güvenli) kullanırsanız, yinelenen bir uygulama hatası tetiklenir. TS, ilk montaj aşırı yükünü yukarıdan aşağıya sıraya göre seçer, böylece aşırı yükler en spesifikinden en genişine doğru sıralanır.
TS'de yöntem aşırı yüklenmesi: daha karmaşık bir örnek
Aşırı yüklenmiş sınıf yöntemi türleri, aşırı yük işlevine benzer şekilde kullanılabilir:
class LayerFactory {
createFeatureLayer(a1: string, a2: number): string
createFeatureLayer(a1: number, a2: boolean, a3: string): number
createFeatureLayer(a1: string | number, a2: number | boolean, a3?: string)
: number | string { /*... your implementation*/ }
}
const fact = new LayerFactory()
fact.createFeatureLayer("foo", 42) // string
fact.createFeatureLayer(3, true, "bar") // number
İşlev uygulaması derleyici tarafından uygulanan tüm aşırı yük imzalarıyla uyumlu olduğu için çok farklı aşırı yüklemeler mümkündür.
Daha fazla bilgi: