Begrensninger på generiske typer i TypeScript

I en av de foregående leksjonene opprettet vi en funksjon av generisk type som skulle skrive ut lengden på parameteren som ble sendt inn. Men under kompilering fikk vi en feil, siden ikke alle typer kan ha en lengde:

typescriptfunction myFunc < T > (data: T): T {
  console.log(data.length); // feil
  return data;
}

Den gangen løste vi situasjonen ved å endre den generiske typen til en generisk array-type. Men i TypeScript er det mulighet til å opprette begrensninger for generiske typer. For å gjøre dette skriver vi nøkkelordet extends etter variabelen T i vinkelparentesene. Etter det skriver vi en ny variabel str av strengtype i krøllparentesene. Resten av koden i funksjonen forblir uendret:

typescriptfunction myFunc <T extends {str: string}> (data: T): void {
  console.log(data.str.length);
}

Det betyr at den generiske typen arver typen til variabelen str, spesifisert i krøllparentesene. La oss nå sjekke hvordan funksjonen vår fungerer og opprette en variabel myStr, som refererer til typen str, og tilordne den en verdi i krøllparenteser:

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

La oss kalle funksjonen myFunc, uten å glemme å spesifisere typen på nytt, og sende variabelen myStr som en parameter:

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

Basert på eksemplet som ble vist i leksjonen, definer en funksjon for å finne lengden av en numerisk array.