Что такое перегрузка функций в целом?
Функция перегрузки или перегрузки методов является возможность создания нескольких функций на одном имени с различными реализациями ( Википедия )
Что такое перегрузка функций в 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 выбирает первую фитинговую перегрузку в порядке сверху вниз, поэтому перегрузки сортируются от наиболее специфических к наиболее широким.
Перегрузка метода в 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
Возможны очень разные перегрузки, так как реализация функции совместима со всеми сигнатурами перегрузки - обеспечивается компилятором.
Больше информации: