Limitations des génériques en TypeScript
Dans l'une des leçons précédentes, nous avons créé une fonction de type générique qui devait afficher la longueur du paramètre qui lui était transmis. Cependant, lors de la compilation, une erreur est survenue, car tous les types ne peuvent pas avoir de longueur :
function myFunc < T > (data: T): T {
console.log(data.length); // erreur
return data;
}
À cette occasion, nous avons corrigé la situation en modifiant
le type générique en type de tableau générique.
Mais TypeScript offre la possibilité de créer
des contraintes sur les génériques. Pour cela, après la variable
T dans les chevrons, nous écrivons
le mot-clé extends. Après celui-ci,
dans des accolades, nous enregistrons une nouvelle
variable str de type chaîne de caractères.
Le reste du code de la fonction restera inchangé :
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Ainsi, le type générique hérite du type
de la variable str, spécifiée dans les accolades.
Maintenant, vérifions le fonctionnement
de notre fonction et créons une variable myStr,
se référant au type str, et assignons-lui
une valeur entre accolades :
let myStr: {str: string} = {str: 'abcde'};
Appelons la fonction myFunc, sans
oublier de spécifier à nouveau son type et passons
la variable myStr comme paramètre :
myFunc <{str: string}> (myStr);
Sur la base de l'exemple examiné dans la leçon, définissez une fonction pour trouver la longueur d'un tableau numérique.