⊗tsSpGnPTL 36 of 37 menu

Utilisation des paramètres de type dans les contraintes des génériques en TypeScript

TypeScript offre également la possibilité de déclarer un paramètre de type qui sera contraint par un autre paramètre de type. Cela est nécessaire lorsqu'il faut copier les propriétés d'un objet dans un autre, tout en se prémunir contre le fait de transmettre une propriété excédentaire.

Examinons l'exemple suivant. Revenons à la fonction myFunc, déterminant la longueur d'une variable :

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

Cependant, nous voulons maintenant que cette fonction fonctionne uniquement avec les types ayant une propriété length. Pour ce faire, créons une interface ILength, à laquelle nous attribuerons une propriété length de type numérique :

interface ILength { length: number; }

Ensuite, dans notre fonction, définissons un type générique qui hérite de ILength via le mot-clé extends :

function myFunc <T extends ILength> (data: T): T { console.log(data.length); return data; }

Voici à quoi ressemble notre code complet :

interface ILength { length: number; } function myFunc <T extends ILength> (data: T): T { console.log(data.length); return data; }

Vérifions le fonctionnement de notre fonction et trouvons la longueur d'une chaîne de caractères :

console.log(myFunc('abcde'));

Résultat de l'exécution du code :

5 'abcde'

Et maintenant, passons un tableau en paramètre :

console.log(myFunc(['a', 'b', 'c']));

Résultat de l'exécution du code :

3 [ 'a', 'b', 'c' ]
Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser