import { z } from 'zod';
const UserSchema = z.object({
id: z.number(),
name: z.string().min(2).max(50),
email: z.string().email(),
age: z.number().min(18).optional(),
role: z.enum(['admin', 'user', 'guest']),
createdAt: z.string().datetime(),
});
type User = z.infer<typeof UserSchema>;
// Validation
const result = UserSchema.safeParse(data);
if (result.success) {
console.log(result.data); // Typed as User
} else {
console.error(result.error.issues);
}API Request Validation
const CreateUserSchema = UserSchema.omit({ id: true, createdAt: true });
const UpdateUserSchema = CreateUserSchema.partial();
// In Express/NestJS handler
const validated = CreateUserSchema.parse(req.body); // Throws on invalid