TypeScript catches type errors at compile time. Zod catches them at runtime β which is where the real danger lies when your data comes from APIs, forms, and databases that TypeScript cannot see.
Why Runtime Validation Is Non-Negotiable
TypeScript's type system is erased at compile time. Your TypeScript types describe what you expect data to look like β but they cannot stop an API from returning unexpected data, a user from submitting a form with wrong types, or a database from containing legacy records that do not match your current schema.
Zod closes this gap by validating data shape and types at runtime, throwing detailed errors when data does not match the schema you defined.
Core Zod Primitives
z.string(), z.number(), z.boolean(), z.null(), z.undefined(), and z.unknown() cover all primitive types. z.object({}) defines object shapes. z.array(schema) validates arrays. z.union([]) handles fields that can be one of several types.
Powerful Refinements
Zod goes beyond basic type checking with built-in refinements: z.string().email() validates email format. z.string().url() validates URLs. z.number().min(0).max(100) validates ranges. z.string().min(8) enforces minimum length. These eliminate the need for manual regex validation for common cases.
Generate a Zod schema from any existing JSON object in seconds using the JSON to Zod Schema converter. Paste your API response and get production-ready TypeScript instantly.
Integration with tRPC
tRPC uses Zod schemas as the primary mechanism for defining input and output types for API procedures. The schema serves triple duty: TypeScript type inference, runtime input validation, and automatic API documentation. This is the most compelling Zod use case in modern full-stack development.
Integration with React Hook Form
Using zodResolver from @hookform/resolvers connects Zod schemas to React Hook Form. Form validation, error messages, and TypeScript types all derive from a single Zod schema definition β eliminating duplication between form validation logic and TypeScript types.