menu

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
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť