Comment typer efficacement en JavaScript

⏱ Temps de lecture : 3 mins

Nativement, Javascript n'inclut pas de typage au sens où on l'entend.


Si on prend Java, on peut typer avec char ou byte les variables et les paramètres de fonction.

Si une valeur autre que celle attendue est envoyée, une erreur est levée.


Il n'y a pas ce mécanisme en JavaScript, on peut envoyer n'importe quoi dans une fonction, celle-ci sera toujours exécutée !


TypeScript , la solution intermédiaire pour le typage JavaScript


Inspiré du C#, TypeScript permet d'ajouter une couche de type plutôt robuste.


Les fichiers typescript sont compilés en JavaScript. Il s'agit d'un langage à part entière.


On arrive donc à sa principale limite : le typage est limité à la compilation


Ce code TypeScript


Code Typescript de base avec type


Sera compilé comme ceci :


Code javascript compilé depuis le code typescript


Pour en savoir plus sur TypeScript, c'est par ici.


On constate que toute notion de typage disparaît.


Une librairie de validation pour ajouter un contrôle de type


Il existe des librairies de validation de données, par exemple Zod. Ces librairies permettent de s'assurer que les paramètres sont du bon type.


Validation de données avec Zod


Il y a un inconvénient : il faut y penser à chaque fois à utiliser ces fonctionnalités, ce qui devient très verbeux.

Sans compter le flux d'exception et l'impossibilité de rendre cet usage obligatoire.


Et si on tentait de fusionner les deux ?


Les décorateurs, une solution pour un typage de JavaScript à l'exécution.


Les décorateurs sont inclus dans TypeScript depuis les premières versions.

Ils utilisent le pattern decorator, qui peut être implémenté en JS natif.


Ils sont en cours d'implémentation en JavaScript. Pour l'instant, nous allons nous concentrer sur TS.

Un décorateur se présente comme ceci :


Exemple de décorateur


Cette fonction "decorateur" sera appelée à chaque exécution de foo.


Ce pattern très puissant permet d'injecter des dépendances et de réaliser des contrôles (authentification, formulaires ...).


>Nous allons le combiner avec Zod pour pouvoir les transformer en véritable système de typage pour JavaScript.


Pour commencer, il faut créer un utilitaire dans son code qui sera la "boîte noire" de notre système de type:

L'utilitaire du type systeme


Il y a ici deux décorateurs :


  • @param : son rôle sera de récolter les paramètres à valider. On utilise refect-metadata https://www.npmjs.com/package/reflect-metadata  qui permet de pouvoir naviguer d'un décorateur à l'autre.
  • @validate : celui-ci sera purement le décorateur de validation. On part du principe que tous les paramètres décorés par @param sont requis. Un itérateur les parcours et les valide à l'aide de la fonction parse de Zod. à la fin, la fonction décorée est appelée avec les paramètres validés.


Voici l'implémentation :


Implémentation d'un typage en JavaScript


Dans ce code, on définit les codecs dans l'ordre de validation (pour name et foo). et on constate qu'une exception est levée lorsque foo est forcé avec le mauvais type.


Application


L'exemple de la validation de formulaire côté Front:

Utilisation sur un formulaire

Vous avez un vrai système de typage pour votre code JavaScript!


Lien complet de l'exemple ici :


Vous avez d'autres interrogations sur le développement web ou JavaScript ? N'hésitez à explorer nos autres articles pour enrichir vos connaissances ou à nous contacter pour une accompagnement ou une formation

En résumé

  • En JS natif, le typage est impossible.
  • Il existe une librairie, Zod, qui permet de valider les données entrantes.
  • L'utilisation de cette librairie, avec les décorateurs TypeScript, permet d'implémenter un typage à l'éxécution.

Partager cet article

Qui sommes-nous ?

Mon Formateur Indépendant est un collectif d'experts du secteur du digital.


Nous proposons des formations professionnelles et des accompagnements sur-mesure sur le développement web, la cybersécurité, le SEO et le marketing digital.


Ecrit par : Thomas Dupont

photo de profil de Thomas Dupont


Avec une double casquette de développeur et de contrôleur financier, Thomas allie une expertise technique en développement web à de solides connaissances en gestion d'entreprise. Cette combinaison unique lui permet de comprendre et d'agir efficacement sur les problématiques de ses clients.
En tant que développeur web depuis 10 ans, Thomas maîtrise les technologies et langages web comme JavaScript, TypeScript et Node.js.
Il est intervenu pour des sociétés prestigieuses telles que L'Oréal, Louis Vuitton ou Chanel et travaille sur des applications comptabilisant des centaines de milliers d'utilisateurs actifs.
Il vous apportera une vraie vision orientée solutions.