Перагрузкі функцый у 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'); // верне бягучы тэкст