Перегрузки функций в TypeScript
Иногда встречаются функции, которые возвращают значения, тип которых зависит от переданных параметров. Для этого в TypeScript используют перегрузку функций. Она позволяет указать разные варианты сигнатур функции.
Давайте посмотрим на примере. Пусть у нас есть функция, которая разбивает символы строки в массив букв:
function splitStr(str: string): string[] {
return str.split('');
}
Пусть у нас также есть функция, которая разбивает символы числа в массив цифр:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Давайте объединим обе функции в одну. Новая функция в зависимости от типа параметра должна возвращать или массив чисел или массив строк.
Используем перегрузку, чтобы объявить различные сигнатуры нашей функции:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// реализация обоих сигнатур
}
Напишем теперь реализацию функции. В ее коде мы должны условием определить, какая из сигнатур функции сработала, и в зависимости от этого запустить нужный код с результатом нужного типа:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
if (typeof val === 'string') {
return val.split('');
} else {
let str: string = String(val);
let arr: string[] = str.split('');
return arr.map((elem: string): number => +elem);
}
}
В отличие от других языков, в TypeScript в перегрузке создается одна функция. Нельзя сделать несколько функций с одним именем, но разными сигнатурами.
Напишите функцию, которая будет возвращать или изменять текст DOM элемента. Она должна работать следующим образом:
text('#elem', 'text'); // установит текст
text('#elem'); // вернет текущий текст