snippettypescriptzodModeratepending
TypeScript Zod schema validation
Viewed 0 times
zodvalidationschemainferenceruntimeparsing
Problem
Runtime validation of API responses, form data, or config requires manual type guards that drift from TypeScript types.
Solution
Use Zod for runtime validation with automatic type inference:
import { z } from 'zod';
const UserSchema = z.object({
id: z.string().uuid(),
name: z.string().min(1).max(100),
email: z.string().email(),
age: z.number().int().min(0).max(150).optional(),
role: z.enum(['admin', 'user', 'viewer']),
tags: z.array(z.string()).default([]),
});
// Type is automatically inferred
type User = z.infer<typeof UserSchema>;
// Validate and parse
const result = UserSchema.safeParse(apiResponse);
if (result.success) {
const user: User = result.data; // fully typed
} else {
console.error(result.error.issues);
}
// Transform during parsing
const NormalizedUser = UserSchema.transform(u => ({
...u,
email: u.email.toLowerCase(),
}));
import { z } from 'zod';
const UserSchema = z.object({
id: z.string().uuid(),
name: z.string().min(1).max(100),
email: z.string().email(),
age: z.number().int().min(0).max(150).optional(),
role: z.enum(['admin', 'user', 'viewer']),
tags: z.array(z.string()).default([]),
});
// Type is automatically inferred
type User = z.infer<typeof UserSchema>;
// Validate and parse
const result = UserSchema.safeParse(apiResponse);
if (result.success) {
const user: User = result.data; // fully typed
} else {
console.error(result.error.issues);
}
// Transform during parsing
const NormalizedUser = UserSchema.transform(u => ({
...u,
email: u.email.toLowerCase(),
}));
Why
Zod provides a single source of truth for both TypeScript types and runtime validation, eliminating type/validation drift.
Revisions (0)
No revisions yet.