Beperkingen van generieken in TypeScript

In een van de vorige lessen hebben we een functie van een algemeen type gemaakt die de lengte van de parameter die erin werd doorgegeven moest uitvoeren. Tijdens compilatie kregen we echter een foutmelding, omdat niet alle typen een lengte kunnen hebben:

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

In dat geval hebben we de situatie gecorrigeerd door het algemene type te wijzigen in het type van een generieke array. Maar in TypeScript is er een mogelijkheid om beperkingen voor generieken te creëren. Om dit te doen schrijven we in de hoekige haakjes, na de variabele T het sleutelwoord extends. Daarna schrijven we in accolades een nieuwe variabele str van het type string. De rest van de code van de functie blijft onveranderd:

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

Het blijkt dat het generieke type het type erft van de variabele str, gespecificeerd in de accolades. Laten we nu de werking van onze functie controleren en een variabele myStr maken, die verwijst naar het type str, en geven we er een waarde aan in accolades:

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

Laten we de functie myFunc aanroepen, zonder vergeten opnieuw het type ervan op te geven, en geven we de variabele myStr door als parameter:

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

Op basis van het voorbeeld dat in de les is besproken, definieer een functie voor het vinden van de lengte van een numerieke array.