Yleistyksen rajoitukset TypeScriptissä
Yhdessä aiemmista oppitunneista loimme yleistetyn tyypin funktion, jonka piti tulostaa siihen välitetyn parametrin pituus. Kuitenkin kääntäessä meille annettiin virhe, koska kaikilla tyypeillä ei välttämättä ole pituutta:
function myFunc < T > (data: T): T {
console.log(data.length); // virhe
return data;
}
Siinä tapauksessa korjasimme tilanteen muuttamalla
yleistetyn tyypin yleistetyn taulukon tyypiksi.
Mutta TypeScriptissä on mahdollista luoda
yleistyksen rajoituksia. Tätä varten kulmasulkeissa,
muuttujan T jälkeen kirjoitamme
avainsanan extends. Sen jälkeen
aaltosulkeissa kirjoitamme uuden
muuttujan str merkkijonotyypin.
Loput funktion koodista pysyvät
muuttumattomina:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Käy ilmi, että yleistetty tyyppi perii tyypin
muuttujasta str, joka on määritelty aaltosulkeissa.
Testataan nyt funktiomme toimintaa
ja luodaan muuttuja myStr,
joka viittaa tyyppiin str, ja asetamme
sille arvon aaltosulkeissa:
let myStr: {str: string} = {str: 'abcde'};
Kutsutaan funktiota myFunc, unohtamatta
määrittää sen tyyppi uudelleen ja välitetään
muuttuja myStr parametrina:
myFunc <{str: string}> (myStr);
Oppitunnissa tarkastellun esimerkin perusteella määritä funktio numerotaulukon pituuden löytämiseksi.