menu

Funkcijų perkrovos TypeScript'e

Kartais pasitaiko funkcijų, kurios grąžina reikšmes, kurių tipas priklauso nuo perduotų parametrų. Tam TypeScript'e naudojama funkcijų perkrova. Ji leidžia nurodyti skirtingus funkcijos signatūrų variantus.

Pažiūrėkime pavyzdžiu. Tarkime, kad turime funkciją, kuri skaido eilutės simbolius į raidžių masyvą:

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

Tarkime, kad taip pat turime funkciją, kuri skaido skaičiaus simbolius į skaitmenų masyvą:

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

Sujungkime abi funkcijas į vieną. Nauja funkcija, priklausomai nuo parametro tipo, turi grąžinti arba skaičių masyvą, arba eilučių masyvą.

Naudokime perkrovą, kad deklaruotume skirtingas mūsų funkcijos signatūras:

function splitVal(val: number): number[]; function splitVal(val: string): string[] { // abiejų signatūrų implementacija }

Dabar parašykime funkcijos implementaciją. Jos kode mes turime sąlyga nustatyti, kuri iš funkcijos signatūrų suveikė, ir priklausomai nuo to paleisti reikiamą kodą su rezultatu reikiamo tipo:

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); } }

Skirtingai nei kitose kalbose, TypeScript'e perkrovoje sukuriama viena funkcija. Negalima sukurti kelių funkcijų su vienu pavadinimu, bet skirtingomis signatūromis.

Parašykite funkciją, kuri grąžins arba pakeis DOM elemento tekstą. Ji turi veikti taip:

text('#elem', 'text'); // nustatys tekstą text('#elem'); // grąžins esamą tekstą
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti