Cerchi un modo semplice ed efficace per validare i tuoi dati in TypeScript? Scopri Zod, la libreria che rivoluzionerà il tuo modo di gestire la validazione dei dati. In soli 2 minuti, capirai perché Zod è diventato indispensabile!
Perché Zod? 🎯
Zod è una libreria di validazione che si distingue per:
- Una sintassi intuitiva e concisa
- Un'integrazione perfetta con TypeScript
- Un'inferenza automatica dei tipi
- Messaggi di errore chiari e personalizzabili
Installazione rapida ⚙️
1npm install zod
2# oppure
3yarn add zod
Le basi di Zod in 30 secondi 🚀
1import { z } from 'zod';
2
3// Definizione di uno schema semplice
4const userSchema = z.object({
5 nome: z.string().min(2, 'Il nome deve contenere almeno 2 caratteri'),
6 eta: z.number().min(18, "L'utente deve essere maggiorenne"),
7 email: z.string().email('Formato email non valido'),
8});
9
10// Tipo inferito automaticamente!
11type User = z.infer<typeof userSchema>;
12
13// Validazione dei dati
14const validateUser = (data: unknown) => {
15 const result = userSchema.safeParse(data);
16 return result.success ? result.data : result.error.issues;
17};
Funzionalità avanzate 💪
Validazione condizionale
1const formSchema = z
2 .object({
3 tipo: z.enum(['privato', 'azienda']),
4 partitaIva: z.string().optional(),
5 })
6 .refine((data) => !(data.tipo === 'azienda' && !data.partitaIva), {
7 message: "La Partita IVA è obbligatoria per un'azienda",
8 });
Trasformazioni automatiche
1const dateSchema = z.string().transform((str) => new Date(str));
2const numberSchema = z.string().transform(Number);
Best practices 🎓
- Preferire
safeParse invece di parse per una gestione degli errori più elegante:
1const result = userSchema.safeParse(data);
2if (!result.success) {
3 console.log(result.error.issues);
4 return;
5}
6// Utilizzare result.data in sicurezza
- Riutilizzare gli schemi per una migliore manutenibilità:
1const addressSchema = z.object({
2 via: z.string(),
3 citta: z.string(),
4 cap: z.string().regex(/^\d{5}$/),
5});
6
7const userSchema = z.object({
8 // ...altri campi
9 indirizzo: addressSchema,
10});
Casi d'uso comuni 📋
Validazione API
1const apiResponseSchema = z.object({
2 status: z.number(),
3 data: z.array(userSchema),
4 metadata: z.record(z.string()),
5});
6
7async function fetchUsers() {
8 const response = await fetch('/api/users');
9 const data = await response.json();
10
11 const result = apiResponseSchema.safeParse(data);
12 if (!result.success) {
13 throw new Error('Risposta API non valida');
14 }
15
16 return result.data;
17}
Validazione form
1const loginSchema = z.object({
2 email: z.string().email(),
3 password: z.string().min(8),
4});
5
6function handleSubmit(formData: unknown) {
7 const result = loginSchema.safeParse(formData);
8 if (!result.success) {
9 // Mostrare gli errori
10 return;
11 }
12 // Processare i dati validati
13}
Per approfondire 🎈
In sintesi ✨
Zod semplifica notevolmente la validazione dei dati in TypeScript garantendo al contempo la sicurezza dei tipi. La sua sintassi intuitiva e la sua flessibilità lo rendono uno strumento prezioso per ogni sviluppatore TypeScript.
Non esitare a consultare la documentazione ufficiale per approfondire le tue conoscenze di Zod!