Basic usage
This page will walk you through the basics of creating schemas, parsing data, and using inferred types. For complete documentation on Zod's schema API, refer to Defining schemas.
Defining a schema
Before you can do anything else, you need to define a schema. For the purposes of this guide, we'll use a simple object schema.
Parsing data
Now that we have a schema, we can parse some data with it.
.parse()
.parse(data: unknown): T
Given any Zod schema, use .parse
to validate an input. If it's valid, Zod returns a strongly-typed deep clone of the input.
Otherwise, a ZodError
instance is thrown with detailed information about the validation issues.
Note — If your schema uses certain asynchronous APIs like async
refinements or transforms, you'll need to use the .parseAsync()
method instead.
.safeParse()
.safeParse(data:unknown): { success: true; data: T; } | { success: false; error: ZodError; }
To avoid try/catch
blocks, use .safeParse()
. This method returns an object containing either the successfully parsed data or a ZodError
.
The result type is a discriminated union, so you can handle both cases conveniently:
Note — If your schema uses certain asynchronous APIs like async
refinements or transforms, you'll need to use the .safeParseAsync()
method instead.
Inferred types
Zod infers a static type from your schema definitions. You can extract this type with the z.infer<>
utility and use it however you like.
Now that we have the basics covered, let's jump into the Schema API.