Begrænsninger af generics i TypeScript

I en af de foregående lektioner oprettede vi en funktion af generisk type, som skulle udskrive længden af parameteren overført til den. Dog fik vi en fejl under kompilering, da ikke alle typer kan have en længde:

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

I det tilfælde løste vi situationen ved at ændre den generiske type til en type af generisk array. Men i TypeScript er der en mulighed for at oprette begrænsninger af generics. For at gøre dette skriver vi nøgleordet extends efter variablen T i vinkelparenteserne. Efter det skriver vi en ny variable str af strengtype i krøllede parenteser. Resten af funktionens kode forbliver uændret:

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

Det betyder, at den generiske type arver typen af variablen str, angivet i krøllede parenteser. Lad os nu teste vores funktions virkning og oprette en variabel myStr, der refererer til typen str, og tildele den en værdi i krøllede parenteser:

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

Lad os kalde funktionen myFunc, uden at glemme at angive dens type igen, og overføre variablen myStr som en parameter:

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

Baseret på eksemplet set i lektionen, angiv funktionen til at finde længden af et numerisk array.