O que é sobrecarga de função em geral?
Sobrecarga de função ou sobrecarga de método é a capacidade de criar várias funções com o mesmo nome com diferentes implementações ( Wikipedia )
O que é sobrecarga de função em JS?
Esse recurso não é possível no JS - a última função definida é utilizada no caso de várias declarações:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... e em TS?
Sobrecargas são uma construção em tempo de compilação sem impacto no tempo de execução 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
Um erro de implementação duplicado é acionado, se você usar o código acima (mais seguro que o JS). O TS escolhe a primeira sobrecarga de montagem na ordem descendente, para que as sobrecargas sejam classificadas da mais específica à mais ampla.
Sobrecarga de método no TS: um exemplo mais complexo
Os tipos de métodos de classe sobrecarregados podem ser usados de maneira semelhante à sobrecarga de funções:
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
As sobrecargas muito diferentes são possíveis, pois a implementação da função é compatível com todas as assinaturas de sobrecarga - impostas pelo compilador.
Mais informações: