5 points par asheswook 2025-12-24 | 2 commentaires | Partager sur WhatsApp

Bonjour.

En général, lorsqu’on développe un backend TypeScript, vous savez sans doute que les erreurs surviennent souvent dans la partie runtime qui n’est pas détectée au moment de la compilation.

Cela arrive notamment très souvent dans les implémentations de repository qui parsèment des lignes de base de données ou dans les parties de communication avec des API externes.

Quand les valeurs reçues depuis la base de données diffèrent de ce qui est attendu, des valeurs peuvent être injectées comme undefined à l’exécution, ou bien lors d’un cast, des erreurs humaines peuvent survenir parce qu’on identifie mal les valeurs primitives venues de l’extérieur.

Même lors de l’implémentation d’un repository, il faut ajouter partout des types d’interface pour les valeurs primitives venant de l’extérieur. Ce n’est peut-être qu’un petit problème, mais j’ai créé cela pour que ce soit plus confortable à utiliser.

En pratique, le code des parties d’API externes et des implémentations de base de données est devenu beaucoup plus concis, et les erreurs survenant à l’exécution ont aussi diminué.

Après l’avoir utilisé côté backend dans notre équipe et l’avoir trouvé convaincant, je l’ai publié sur npm.

import { validate } from 'valdex';  
  
const data: unknown = await fetchData();  
  
validate(data, {  
  name: String,  
  age: Number,  
  active: Boolean  
});  
  
// TypeScript now knows the exact type of data  
data.name // string  
data.age // number  
data.active // boolean  

L’exemple ci-dessus suppose une situation où l’on récupère des données depuis l’extérieur. Que vous utilisiez axios, mysql2 ou postgres pg, cela s’applique. Une validation est effectuée sur une valeur entrée avec le type unknown, et si elle est correcte, dans le flux de contrôle suivant cette valeur est affirmée (asserts) comme étant celle définie dans validate().

Bien sûr, il est aussi possible d’utiliser une bibliothèque comme zod.

La différence entre zod et valdex, c’est que valdex n’utilise pas de schéma créé sous forme d’instance ; il permet de manipuler les types de données de manière déclarative directement à l’endroit où les données sont récupérées. Il n’est pas nécessaire d’aller sans cesse modifier le code en haut et en bas pour corriger une interface ou une classe DTO.

npm i valdex  

Vous pouvez l’installer depuis npm et l’essayer.

Github: https://github.com/asheswook/valdex

2 commentaires

 
sunrabbit 2025-12-24

Pour les types simples, ça a l’air d’offrir une DX vraiment excellente, wow.

 
asheswook 2025-12-24

Comme il prend en charge aussi bien les objets imbriqués que les tableaux, jusqu’à présent je n’ai rien trouvé de gênant lors de l’implémentation d’API externes ou de repositories.
Merci pour votre intérêt !