Visionner la vidéo

Apprendre Zod en 5 minutes : Valider ses données facilement en TypeScript

  Typescript Javascript

Introduction

Bienvenue dans cet article rapide pour découvrir Zod, une de mes librairies préférées pour la validation de données en JavaScript et TypeScript ! Et bonne nouvelle : Zod 4 est en bêta — c’est donc le moment parfait pour apprendre à l’utiliser efficacement.

Qu’est-ce que Zod ?

Zod est une librairie open-source qui permet de valider facilement des données. Son concept est simple :

Zod est particulièrement utile pour :

Image les avantages de la librairie Zod

Premier exemple : validation d’une chaîne de caractères

import { z } from "zod";

const schema = z.string();

schema.parse("Hello World"); // OK
schema.parse(42); // Erreur de validation

👉 On décrit ce qu’on attend (string), Zod se charge du reste !

Exemple complet : valider un utilisateur

import { z } from "zod";

const userSchema = z.object({
  name: z.string(),
  age: z.number().min(0),
  email: z.string().email(),
});

// Validation
try {
  userSchema.parse({ name: "Alice", age: 25, email: "alice@example.com" });
  console.log("Data are valid");
} catch (error) {
  console.error(error.errors);
}

Avec parse, tu obtiens une erreur détaillée si les données ne sont pas conformes.

Avec safeParse, tu peux éviter les try/catch pour une gestion plus fluide :

const result = userSchema.safeParse({ name: "Alice", age: 25, email: "alice@example.com" });

if (result.success) {
  console.log(result.data);
} else {
  console.error(result.error.errors);
}

Aller plus loin : schémas avancés

Validation croisée avec refine

Vérifier que deux mots de passe correspondent :

const passwordSchema = z.object({
  password: z.string().min(6),
  confirmPassword: z.string(),
}).refine((data) => data.password === data.confirmPassword, {
  message: "Passwords do not match",
  path: ["confirmPassword"],
});

Conversion automatique avec coerce

Parfois, les données proviennent d’un formulaire (donc sous forme de chaînes). Zod peut automatiquement convertir ces valeurs :

const schema = z.object({
  age: z.coerce.number(),
});

schema.parse({ age: "30" }); // { age: 30 }

Générer un type TypeScript avec z.infer

const userSchema = z.object({
  name: z.string(),
  age: z.number(),
  email: z.string().email(),
});

type User = z.infer<typeof userSchema>;
// User est maintenant { name: string; age: number; email: string }

Pourquoi apprendre Zod maintenant ?

Ressources complémentaires 📚

Si tu veux aller plus loin :

👉 Découvre ma formation complète sur Astro (Typescript + Zod inclus)

Commentaires