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:
function 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:
function 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:
let 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:
myFunc <{str: string}> (myStr);
Op basis van het voorbeeld dat in de les is besproken, definieer een functie voor het vinden van de lengte van een numerieke array.