menu

Přetížení funkcí v TypeScript

Někdy se setkáme s funkcemi, které vracejí hodnoty, jejichž typ závisí na předaných parametrech. K tomu v TypeScriptu používají přetížení funkcí. To umožňuje specifikovat různé varianty signatur funkce.

Podívejme se na příklad. Předpokládejme, že máme funkci, která rozděluje znaky řetězce do pole písmen:

function splitStr(str: string): string[] { return str.split(''); }

Předpokládejme také, že máme funkci, která rozděluje číslice čísla do pole čísel:

function splitNum(num: number): number[] { let str: string = String(num); let arr: string[] = str.split(''); return arr.map(elem => +elem); }

Spojme obě funkce do jedné. Nová funkce by v závislosti na typu parametru měla vrátit buď pole čísel, nebo pole řetězců.

Použijme přetížení k deklarování různých signatur naší funkce:

function splitVal(val: number): number[]; function splitVal(val: string): string[] { // implementace obou signatur }

Nyní napišme implementaci funkce. V jejím kódu musíme podmínkou určit, která signatura funkce se aktivovala, a v závislosti na tom spustit příslušný kód s výsledkem požadované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 rozdíl od jiných jazyků, v TypeScriptu se při přetížení vytváří jedna funkce. Nelze vytvořit více funkcí se stejným názvem, ale s různými signaturami.

Napište funkci, která bude vracet nebo měnit text DOM elementu. Měla by fungovat následovně:

text('#elem', 'text'); // nastaví text text('#elem'); // vrátí aktuální text
Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout