Validation des données en TypeScript : aperçu des bibliothèques Zod, Yup et io-ts
TypeScript est un langage typé statiquement qui vérifie les types au moment de la compilation. Cependant, à l'exécution (runtime), TypeScript n'effectue aucune vérification. Cela signifie que les données provenant de sources externes — requêtes API, formulaires de saisie, fichiers de configuration — peuvent ne pas correspondre aux types attendus. Pour résoudre ce problème, on utilise des bibliothèques de validation de données qui vérifient la structure et les types de données à l'exécution.
Dans cet article, nous examinerons trois bibliothèques populaires pour la validation de données en TypeScript : Zod, Yup et io-ts. Vous découvrirez comment elles fonctionnent, leurs différences et comment choisir celle qui convient à votre projet.
Pourquoi la validation des données en TypeScript est-elle nécessaire ?
Imaginez que vous écriviez une application qui reçoit des données d'un utilisateur via un formulaire :
interface UserInput { name: string; age: number; email: string;}
function processUserInput(input: UserInput) { console.log(input.name.toUpperCase());}En TypeScript, ce code sera compilé, même si à l'exécution input.name s'avère être undefined ou un nombre. Cela entraînera une erreur difficile à détecter. Les bibliothèques de validation permettent de garantir que les données correspondent au schéma attendu et fournissent des messages d'erreur clairs.
Zod — une bibliothèque moderne et rapide
Zod est une bibliothèque de validation déclarative et d'inférence de types. Elle est spécialement conçue pour TypeScript et propose une API concise.
Installation :
npm install zodExemple d'utilisation :
import { z } from 'zod';
// Définir le schéma de validationconst UserSchema = z.object({ name: z.string().min(2, "Le nom doit contenir au moins 2 caractères"), age: z.number().int().positive("L'âge doit être un nombre positif"), email: z.string().email("Email invalide"),});
// Inférer le type à partir du schématype User = z.infer<typeof UserSchema>;
// Validation des donnéesconst result = UserSchema.safeParse({ name: "Anna", age: 25, email: "anna@example.com",});
if (result.success) { // result.data est de type User console.log(result.data.name);} else { // result.error contient des informations détaillées sur les erreurs console.error(result.error.format());}Zod prend en charge les structures complexes : objets imbriqués, tableaux, unions, discriminated unions. Il peut également transformer des données (par exemple, convertir des chaînes en nombres).
Yup — une bibliothèque populaire de l'écosystème React
Yup est une bibliothèque de validation de schémas largement utilisée avec Formik dans les applications React. Elle a une API similaire à Zod, mais est apparue plus tôt.
Installation :
npm install yupExemple d'utilisation :
import * as yup from 'yup';
// Définir le schémaconst userSchema = yup.object({ name: yup.string().min(2, "Le nom doit contenir au moins 2 caractères").required(), age: yup.number().integer().positive().required(), email: yup.string().email("Email invalide").required(),});
// Validation avec la méthode validateuserSchema.validate({ name: "Ivan", age: 30, email: "ivan@example.com",}).then(validData => console.log(validData)).catch(err => console.error(err.errors));Yup fournit des méthodes pratiques pour la validation de formulaires, prend en charge les messages d'erreur personnalisés et les règles conditionnelles (when). Cependant, il est moins étroitement intégré à TypeScript que Zod — l'inférence de types nécessite des actions supplémentaires.
io-ts — une approche fonctionnelle de la validation
io-ts est une bibliothèque basée sur la programmation fonctionnelle. Elle utilise le concept de codecs pour transformer
Aussi dans la bibliothèque
Spring Data JPA Java : guide complet avec exemples concrets
Envoi de SMS en JavaScript (Node.js) : API, bibliothèques et exemples de code
Event Bus et le pattern Observer en Java : guide avec exemples
Mise en cache en Java : Redis, Caffeine, Ehcache — guide complet