Inferenza dei Tipi
z.infer
Questa è la “magia” di Zod. Non hai bisogno di definire un’interfaccia TypeScript separata dal tuo schema di validazione.
```typescript import { z } from “zod”;
const UserSchema = z.object({ username: z.string(), email: z.string().email(), age: z.number().optional(), tags: z.array(z.string()), });
// Estrai il tipo TypeScript
type User = z.infer
// Ora ‘User’ è equivalente a: // { // username: string; // email: string; // age?: number | undefined; // tags: string[]; // } ```
Trasformazioni (.transform)
Se usi .transform(), il tipo inferito sarà quello dell’output della trasformazione.
```typescript const stringToNumber = z.string().transform((val) => val.length);
type Output = z.infer
Notare z.input e z.output (che z.infer usa di default).
Questo è utilissimo quando i dati che ricevi (es. stringa “123” da un form) sono diversi da quelli che vuoi usare nella logica (numero 123).