Preopterećenja funkcija u TypeScript-u
Ponekad se susreću funkcije koje vraćaju vrednosti čiji tip zavisi od prosleđenih parametara. Za ovo u TypeScript-u koriste preopterećenje funkcija. Ono omogućava definisanje različitih varijanti potpisa funkcije.
Pogledajmo na primeru. Neka imamo funkciju koja deli simbole stringa u niz slova:
function splitStr(str: string): string[] {
return str.split('');
}
Neka takođe imamo funkciju koja delii simbole broja u niz cifara:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Spojimo obe funkcije u jednu. Nova funkcija u zavisnosti od tipa parametra treba da vrati ili niz brojeva ili niz stringova.
Koristimo preopterećenje da bismo deklarisali različite potpise naše funkcije:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// implementacija oba potpisa
}
Napišimo sada implementaciju funkcije. U njenom kodu moramo uslovom da odredimo koji od potpisa funkcije se aktivirao, i u zavisnosti od toga pokrenuti odgovarajući kod sa rezultatom odgovarajućeg tipa:
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);
}
}
Za razliku od drugih jezika, u TypeScript-u se u preopterećenju kreira jedna funkcija. Ne može se napraviti više funkcija sa istim imenom, ali različitim potpisima.
Napišite funkciju koja će vraćati ili menjati tekst DOM elementa. Treba da radi na sledeći način:
text('#elem', 'text'); // postavi tekst
text('#elem'); // vrati trenutni tekst