Preťaženie funkcií v TypeScript
Niekedy sa vyskytnú funkcie, ktoré vracajú hodnoty, ktorých typ závisí od odovzdaných parametrov. Na to v TypeScript používajú preťaženie funkcií. To umožňuje určiť rôzne varianty signatúr funkcie.
Pozrime sa na príklad. Nech máme funkciu, ktorá rozdelí znaky reťazca na pole písmen:
function splitStr(str: string): string[] {
return str.split('');
}
Nech máme tiež funkciu, ktorá rozdelí znaky čísla na pole číslic:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Spojme obe funkcie do jednej. Nová funkcia v závislosti od typu parametra má vrátiť buď pole čísel alebo pole reťazcov.
Použime preťaženie, aby sme deklarovali rôzne signatúry našej funkcie:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// implementácia oboch signatúr
}
Napíšme teraz implementáciu funkcie. V jej kóde musíme podmienkou určiť, ktorá z signatúr funkcie sa aktivovala, a v závislosti od toho spustiť potrebný kód s výsledkom potrebného typu:
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);
}
}
Na rozdiel od iných jazykov, v TypeScript sa v preťažení vytvára jedna funkcia. Nie je možné vytvoriť viacero funkcií s jedným menom, ale s rôznymi signatúrami.
Napíšte funkciu, ktorá bude vracať alebo meniť text DOM elementu. Má fungovať nasledovne:
text('#elem', 'text'); // nastaví text
text('#elem'); // vráti aktuálny text