TypeScripti generikumite piirangud
Ühes eelmistest õppetundidest loome üldistatud tüübi funktsiooni, mis pidi väljastama sinse edastatud parameetri pikkuse. Siiski tekkis kompileerimisel viga, kuna mitte kõik tüübid ei pruugi omada pikkust:
function myFunc < T > (data: T): T {
console.log(data.length); // viga
return data;
}
Sel juhul parandasime olukorda, muutes
üldistatud tüübi üldistatud massiivi tüübiks.
Kuid TypeScriptis on võimalik luua
generikumite piiranguid. Selleks kirjutame
nurksulgudes, muutuja T järele
võtmesõna extends. Pärast seda
kirjutame loogelistes sulgudes uue
muutuja str stringi tüüpi.
Ülejäänud funktsiooni kood jääb
muutmata:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Selgub, et üldistatud tüüp pärib tüübi
muutujalt str, mis on määratud loogelistes
sulgudes. Nüüd kontrollime oma
funktsiooni tööd ja loome muutuja myStr,
viidates tüübile str, ja määrame
sellele väärtuse loogelistes sulgudes:
let myStr: {str: string} = {str: 'abcde'};
Väljutame funktsiooni myFunc, mitte
unustades uuesti määrata selle tüüpi ja edastame
muutuja myStr parameetrina:
myFunc <{str: string}> (myStr);
Õppetükis käsitletud näite põhjal loo funktsioon arvumassiivi pikkuse leidmiseks.