Преоптоварување на функции во 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'); // ќе го врати тековниот текст