Що таке перевантаження функцій взагалі?
Функція перевантаження або перевантаження методів є можливість створення декількох функцій на одному імені з різними реалізаціями ( Вікіпедія )
Що таке перевантаження функцій у JS?
Ця функція неможлива в JS - остання визначена функція береться у випадку декількох оголошень:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... а в ТС?
Перевантаження - це конструкція часу компіляції, яка не впливає на час виконання 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
Якщо ви користуєтесь вищевказаним кодом (безпечніше, ніж JS), спрацьовує дублікат помилки реалізації. TS вибирає перше примірне перевантаження в порядку зверху вниз, тому перевантаження сортуються від найбільш специфічних до найбільш широких.
Метод перевантаження в ТС: більш складний приклад
Типи методів перевантаженого класу можна використовувати аналогічно для функціонування перевантаження:
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
Можливі дуже різні перевантаження, оскільки реалізація функції сумісна з усіма підписами перевантаження - накладає компілятор.
Інфо: