~2 min de lecture
đŠ Installer et utiliser Zod en TypeScript
1. Introduction
Quand on dĂ©veloppe en TypeScript, on bĂ©nĂ©ficie dĂ©jĂ dâun typage statique. Mais attention :
Les types TypeScript disparaissent une fois compilés.
đ Ăa veut dire que rien ne garantit la validitĂ© des donnĂ©es Ă lâexĂ©cution (API, formulaires, JSON externeâŠ).
Câest lĂ que Zod entre en jeu :
- â Validation runtime (pendant lâexĂ©cution)
- â InfĂ©rence automatique des types TypeScript
- â API simple et dĂ©clarative
En bref : Zod = typage + validation de données.
â ïž Zod est Ă utiliser Ă minima aux frontiĂšres de ton application (API externes, formulaires utilisateurs, configuration).
2. Installation
Zod est disponible sur npm.
npm install zod
ou avec yarn :
yarn add zod
ou avec pnpm :
pnpm add zod
Puis importez-le dans vos fichiers :
import { z } from "zod";
3. parse vs safeParse
đč parse()
- Valide les données
- Retourne directement les données typées si elles sont valides
- â Lance une exception si les donnĂ©es sont invalides
const UserSchema = z.object({
id: z.number(),
name: z.string(),
});
const user = UserSchema.parse({ id: 1, name: "Alice" });
console.log(user); // â
{ id: 1, name: "Alice" }
UserSchema.parse({ id: "oops", name: "Bob" });
// â Erreur lancĂ©e : Expected number, received string
đč safeParse()
- Valide les données
- Retourne un objet
{ success: boolean, data?, error? } - â Utile si tu veux gĂ©rer proprement les erreurs sans try/catch
const result = UserSchema.safeParse({ id: "oops", name: "Bob" });
if (result.success) {
console.log(result.data);
} else {
console.log(result.error.format());
}
đ RĂšgle gĂ©nĂ©rale :
parsesi tu es sĂ»r des donnĂ©es (ou dans un test rapide)safeParsesi tu travailles avec de lâinput utilisateur ou une API externe
4. Cas dâusage classiques
4.1 Validation dâentrĂ©e utilisateur (formulaire)
const SignUpSchema = z.object({
username: z.string().min(3),
password: z.string().min(8),
age: z.number().min(18),
});
SignUpSchema.parse({ username: "John", password: "12345678", age: 21 }); // â
4.2 SĂ©curiser les donnĂ©es dâune API
4.2.1 Avec fetch()
const PostSchema = z.object({
id: z.number(),
title: z.string(),
body: z.string().optional(),
});
type Post = z.infer<typeof PostSchema>;
async function fetchPost(id: number): Promise<Post> {
const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${id}`);
const data = await res.json();
return PostSchema.parse(data); // ⥠lance une erreur si invalide
}
4.2.2 Avec HttpClient
const PostSchema = z.object({
id: z.number(),
title: z.string(),
body: z.string().optional(),
});
type Post = z.infer<typeof PostSchema>;
function getPost(id: number): Observable<Post> {
return this.httpClient.get<Post>(`https://jsonplaceholder.typicode.com/posts/${id}`)
.pipe(
map((post) => PostSchema.parse(post))
);
}
4.2.2 Avec HttpResource (v20)
const PostSchema = z.object({
id: z.number(),
title: z.string(),
body: z.string().optional(),
});
readonly
post = httpResource(
() => `https://jsonplaceholder.typicode.com/posts/${id}`,
{ parse: PostSchema.parse },
);
4.3 Générer automatiquement des types
const ProductSchema = z.object({
id: z.string(),
price: z.number(),
});
type Product = z.infer<typeof ProductSchema>;
const p: Product = { id: "123", price: 42 };
4.4 Combiner des schémas
const AdminSchema = UserSchema.extend({ role: z.literal("admin") });
const MemberSchema = UserSchema.extend({ role: z.literal("member") });
const PersonSchema = z.union([AdminSchema, MemberSchema]);
4.5 Transformer / nettoyer les données
const EmailSchema = z
.string()
.email()
.transform((val) => val.toLowerCase());
console.log(EmailSchema.parse("ALICE@EXAMPLE.COM"));
// alice@example.com
5. Cas dâusage (non exhaustif)
Voici quelques situations oĂč Zod devient un super alliĂ© dans des apps rĂ©elles :
ContrĂŽler ce que renvoie ton backend
ContrĂŽler le format de fichiers en input
ContrĂŽler ce que renvoie des API tierces
đ En rĂ©sumĂ© : dĂšs que tu manipules des donnĂ©es venant de lâextĂ©rieur, pense Zod.
6. Conclusion
Zod est un outil incontournable si tu veux :
- sécuriser tes données cÎté frontend et backend
- éviter les bugs liés à des entrées invalides
- ne plus écrire deux fois (types + validations)
â ïž Zod est Ă utiliser Ă minima aux frontiĂšres de ton application pour valider ce qui entre et ce qui sort.
đ Pour un dĂ©veloppeur Angular/TypeScript, Zod devient vite un rĂ©flexe dans :
- les appels API
- la validation dâobjets complexes
EasyAngularKit te donne toujours des outils concrets. Ici, tu peux avancer mĂȘme si ton backend dort encore đŽ.
Envie de creuser davantage tes compĂ©tences Angular ? đRejoins-nous : https://pim.ms/kyv6IOX