Qual è il sovraccarico delle funzioni in generale?
Il sovraccarico di funzioni o il sovraccarico di metodi è la capacità di creare più funzioni con lo stesso nome con implementazioni diverse ( Wikipedia )
Che cos'è il sovraccarico delle funzioni in JS?
Questa funzione non è possibile in JS: l'ultima funzione definita viene utilizzata in caso di più dichiarazioni:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... e in TS?
I sovraccarichi sono un costrutto in fase di compilazione senza alcun impatto sul runtime 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 si utilizza il codice sopra (più sicuro di JS) viene generato un errore di implementazione duplicato. TS sceglie il primo sovraccarico del raccordo in ordine dall'alto verso il basso, quindi i sovraccarichi vengono ordinati dal più specifico al più ampio.
Sovraccarico di metodo in TS: un esempio più complesso
I tipi di metodi di classe sovraccaricati possono essere utilizzati in modo simile per il sovraccarico delle funzioni:
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
Sono possibili sovraccarichi molto diversi, poiché l'implementazione della funzione è compatibile con tutte le firme di sovraccarico - applicata dal compilatore.
Altre informazioni: