Funktioiden ylikuormitus TypeScriptissä
Joskus tulee vastaan funktioita, jotka palauttavat arvoja, joiden tyyppi riippuu annetuista parametreista. Tätä varten TypeScriptissä käytetään funktioiden ylikuormitusta Se mahdollistaa erilaisten funktiomerkintöjen määrittelyn.
Katsotaanpa esimerkkiä. Oletetaan, että meillä on funktio, joka jakaa merkkijonon merkit taulukoksi kirjaimia:
function splitStr(str: string): string[] {
return str.split('');
}
Oletetaan myös, että meillä on funktio, joka jakaa luvun numerot taulukoksi numeroita:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Yhdistetään molemmat funktiot yhdeksi. Uuden funktion tulee parametrin tyypistä riippuen palauttaa joko numerotaulukko tai merkkijonotaulukko.
Käytetään ylikuormitusta määrittelemään eri merkinnät funktiollemme:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// molempien merkintöjen toteutus
}
Kirjoitetaan nyt funktion toteutus. Sen koodissa meidän on määritettävä ehdolla, kumpi funktion merkinnöistä aktivoitui, ja riippuen tästä suoritettava tarvittava koodi oikealla tulostyypillä:
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);
}
}
Toisin kuin muissa kielissä, TypeScriptissä ylikuormituksessa luodaan yksi funktio. useita samanimisiä funktioita, joilla on eri merkinnät, ei voi tehdä.
Kirjoita funktio, joka palauttaa tai muuttaa DOM-elementin tekstiä. Sen tulee toimia seuraavasti:
text('#elem', 'text'); // asettaa tekstin
text('#elem'); // palauttaa nykyisen tekstin