Preobremenitve funkcij v TypeScript
Včasih naletimo na funkcije, ki vračajo vrednosti, katerih tip je odvisen od podanih parametrov. Za to v TypeScript uporabljamo preobremenitev funkcij. Ta omogoča določitev različnih variant signatur funkcije.
Poglejmo si primer. Recimo, da imamo funkcijo, ki razdeli znake niza v polje črk:
function splitStr(str: string): string[] {
return str.split('');
}
Recimo tudi, da imamo funkcijo, ki razdeli števke števila v polje števk:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Zdaj združimo obe funkciji v eno. Nova funkcija mora glede na tip parametra vrniti bodisi polje števil bodisi polje nizov.
Uporabimo preobremenitev, da deklariramo različne signature naše funkcije:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// implementacija obeh signatur
}
Zdaj napišimo implementacijo funkcije. V njeni kodi moramo s pogojem določiti, katera od signatur funkcije se je sprožila, in glede na to zagnati ustrezen kod z rezultatom ustreznega 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 razliko od drugih jezikov, v TypeScript z preobremenitvijo ustvarimo eno samo funkcijo. Ni mogoče ustvariti več funkcij z enakim imenom, a z različnimi signaturami.
Napišite funkcijo, ki bo vrnila ali spremenila besedilo DOM elementa. Delovala naj bi na naslednji način:
text('#elem', 'text'); // nastavi besedilo
text('#elem'); // vrne trenutno besedilo