menu

Przeciążenia funkcji w TypeScript

Czasami spotykamy funkcje, które zwracają wartości, których typ zależy od przekazanych parametrów. W tym celu w TypeScript używa się przeciążenia funkcji. Pozwala ono wskazać różne warianty sygnatur funkcji.

Spójrzmy na przykład. Załóżmy, że mamy funkcję, która dzieli znaki ciągu na tablicę liter:

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

Załóżmy, że mamy także funkcję, która dzieli cyfry liczby na tablicę liczb:

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

Połączmy obie funkcje w jedną. Nowa funkcja w zależności od typu parametru powinna zwracać albo tablicę liczb, albo tablicę ciągów znaków.

Użyjmy przeciążenia, aby zadeklarować różne sygnatury naszej funkcji:

function splitVal(val: number): number[]; function splitVal(val: string): string[] { // implementacja obu sygnatur }

Napiszmy teraz implementację funkcji. W jej kodzie musimy warunkiem określić, która z sygnatur funkcji została wywołana, i w zależności od tego uruchomić odpowiedni kod z wynikiem odpowiedniego 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); } }

W przeciwieństwie do innych języków, w TypeScript w przeciążeniu tworzona jest jedna funkcja. Nie można utworzyć wielu funkcji o jednej nazwie, ale z różnymi sygnaturami.

Napisz funkcję, która będzie zwracać lub zmieniać tekst elementu DOM. Powinna ona działać w następujący sposób:

text('#elem', 'text'); // ustawi tekst text('#elem'); // zwróci aktualny tekst
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć