Funksjons overbelastning i TypeScript
Noen ganger møter vi funksjoner som returnerer verdier, hvis type avhenger av de overførte parameterne. For dette bruker TypeScript funksjons overbelastning. Den tillater oss å spesifisere forskjellige varianter av funksjonens signaturer.
La oss se på et eksempel. Anta at vi har en funksjon som deler opp tegnene i en streng til en matrise med bokstaver:
function splitStr(str: string): string[] {
return str.split('');
}
Anta at vi også har en funksjon som deler opp sifrene i et tall til en matrise med tall:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
La oss kombinere begge funksjonene til én. Den nye funksjonen skal, avhengig av parameterens type, returnere enten en matrise med tall eller en matrise med strenger.
La oss bruke overbelastning for å deklarere forskjellige signaturer for vår funksjon:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// implementering av begge signaturer
}
La oss nå skrive implementeringen av funksjonen. I koden må vi med en betingelse avgjøre hvilken av funksjonens signaturer som ble utløst, og avhengig av dette kjøre den nødvendige koden med et resultat av riktig type:
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);
}
}
I motsetning til andre språk, opprettes det én funksjon i TypeScript sin overbelastning. Man kan ikke lage flere funksjoner med ett navn, men med forskjellige signaturer.
Skriv en funksjon som enten returnerer eller endrer teksten til et DOM-element. Den skal fungere som følger:
text('#elem', 'text'); // setter teksten
text('#elem'); // returnerer den nåværende teksten