¿Qué es la sobrecarga de funciones en general?
La sobrecarga de funciones o la sobrecarga de métodos es la capacidad de crear múltiples funciones del mismo nombre con diferentes implementaciones ( Wikipedia )
¿Qué es la sobrecarga de funciones en JS?
Esta característica no es posible en JS: la última función definida se toma en caso de declaraciones múltiples:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... y en TS?
Las sobrecargas son una construcción en tiempo de compilación sin impacto en el tiempo de ejecución de JS:
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
Se activa un error de implementación duplicado, si utiliza el código anterior (más seguro que JS). TS elige la primera sobrecarga de ajuste en orden de arriba hacia abajo, por lo que las sobrecargas se ordenan de la más específica a la más amplia.
Método de sobrecarga en TS: un ejemplo más complejo
Los tipos de métodos de clase sobrecargados se pueden usar de manera similar para sobrecargar la función:
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
Las sobrecargas muy diferentes son posibles, ya que la implementación de la función es compatible con todas las firmas de sobrecarga, aplicada por el compilador.
Más información: