Was ist Funktionsüberladung im Allgemeinen?
Überladen von Funktionen oder Verfahren Überlastung ist die Fähigkeit, erstellen mehrere Funktionen des gleichen Namens mit unterschiedlichen Implementierungen ( Wikipedia )
Was ist Funktionsüberladung in JS?
Diese Funktion ist in JS nicht möglich - die zuletzt definierte Funktion wird bei mehreren Deklarationen verwendet:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... und in TS?
Überladungen sind ein Konstrukt zur Kompilierungszeit ohne Auswirkungen auf die JS-Laufzeit:
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
Ein doppelter Implementierungsfehler wird ausgelöst, wenn Sie den obigen Code verwenden (sicherer als JS). TS wählt die erste passende Überlast in Top-Down-Reihenfolge aus, sodass die Überlastungen von den spezifischsten bis zu den breitesten sortiert werden.
Methodenüberladung in TS: ein komplexeres Beispiel
Überladene Klassenmethodentypen können auf ähnliche Weise wie das Überladen von Funktionen verwendet werden:
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
Die sehr unterschiedlichen Überladungen sind möglich, da die Funktionsimplementierung mit allen vom Compiler erzwungenen Überlastsignaturen kompatibel ist.
Weitere Infos: