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:

typescriptfunction 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:

typescriptfunction 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:

typescriptlet myStr: {str: string} = {str: 'abcde'};

Väljutame funktsiooni myFunc, mitte unustades uuesti määrata selle tüüpi ja edastame muutuja myStr parameetrina:

typescriptmyFunc <{str: string}> (myStr);
Задание 1

Õppetükis käsitletud näite põhjal loo funktsioon arvumassiivi pikkuse leidmiseks.