Introduction to Zod Schemas
Explore Zod, a TypeScript-first schema declaration and validation library, and its basic types.
Introduction to Zod Schemas is a free tRPC End-to-End Type Safe APIs lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the tRPC End-to-End Type Safe APIs learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What is Zod?
Welcome to Zod! It's a powerful, TypeScript-first validation library. Think of it as a guardian for your data.
Zod helps ensure that the data entering your application (from APIs, forms, etc.) matches the types you expect, even at runtime.
Why Use Zod? Type Safety!
TypeScript provides type safety during development, but what about data received from a server or user input? That data doesn't have TypeScript types.
Zod bridges this gap! It allows you to define a schema, validate runtime data against it, and automatically infer a TypeScript type from that schema. This gives you end-to-end type safety.
Zod's Basic Building Blocks
Zod schemas are created using the z object. Let's look at the most fundamental types: strings, numbers, and booleans.
z.string(): For text values.z.number(): For numeric values.z.boolean(): For true/false values.
These are your starting points for defining data shapes.
Declaring a String Schema
A string schema is simple to declare. You then use the .parse() method to validate data against it. If the data doesn't match, Zod throws an error.
Try running this example to see a valid string being parsed:
import { z } from 'zod';
function runExample() {
const usernameSchema = z.string();
const validUsername = "CoddyUser";
const parsedUsername = usernameSchema.parse(validUsername);
console.log(`Parsed: ${parsedUsername}`);
}
runExample();Handling String Validation Errors
What happens if you try to parse data that isn't a string? Zod throws a ZodError. It's good practice to wrap .parse() calls in a try...catch block.
Run this code to see Zod catch an invalid type:
import { z } from 'zod';
function runExample() {
const usernameSchema = z.string();
try {
const invalidUsername = 123; // Not a string!
usernameSchema.parse(invalidUsername);
} catch (error: any) {
console.log(`Error: ${error.message.split('\n')[0]}`);
}
}
runExample();Number & Boolean Schemas
Number and boolean schemas work similarly. They ensure the data is of the correct primitive type. This prevents unexpected errors later in your application.
Let's see how to define and use them:
import { z } from 'zod';
function runExample() {
const ageSchema = z.number();
const isActiveSchema = z.boolean();
const validAge = ageSchema.parse(30);
console.log(`Age: ${validAge}`);
const validStatus = isActiveSchema.parse(true);
console.log(`Active: ${validStatus}`);
try {
ageSchema.parse("twenty"); // Invalid!
} catch (error: any) {
console.log(`Error (Age): ${error.message.split('\n')[0]}`);
}
}
runExample();Making Fields Optional
Sometimes a piece of data might not always be present. Zod provides the .optional() method for this. It makes a schema accept undefined in addition to its base type.
Note that .optional() allows undefined, but not null by default.
import { z } from 'zod';
function runExample() {
const taglineSchema = z.string().optional();
const withTagline = taglineSchema.parse("Hello World!");
console.log(`With tagline: ${withTagline}`);
const withoutTagline = taglineSchema.parse(undefined);
console.log(`Without tagline: ${withoutTagline}`);
try {
taglineSchema.parse(null); // Optional doesn't allow null!
} catch (error: any) {
console.log(`Error (null): ${error.message.split('\n')[0]}`);
}
}
runExample();Exact Values with Literals
What if you need a field to have a very specific, fixed value? Zod's .literal() method is perfect for this. It ensures the parsed value is exactly what you define.
This is useful for enum-like fields where values are known beforehand.
import { z } from 'zod';
function runExample() {
const statusSchema = z.literal("pending");
const validStatus = statusSchema.parse("pending");
console.log(`Valid status: ${validStatus}`);
try {
statusSchema.parse("completed"); // Not 'pending'!
} catch (error: any) {
console.log(`Error (status): ${error.message.split('\n')[0]}`);
}
}
runExample();Building Blocks for Complex Data
You've now seen the basic types and modifiers in Zod. While simple on their own, these are the fundamental building blocks.
In upcoming lessons, you'll learn how to combine these basic schemas to define much more complex data structures, like objects and arrays, ensuring robust validation for your entire application.
Check Your Zod Basics!
Which Zod schema correctly validates a variable that must be the string "admin" or optionally a number?
Zod Basics Recap
Great job! You've taken your first steps into Zod, understanding its core purpose and basic types.
- Zod provides runtime validation for TypeScript data.
z.string(),z.number(),z.boolean()define basic types..parse()validates data and infers types.- Use
try...catchfor error handling. .optional()allowsundefinedvalues.z.literal()enforces exact fixed values.
These skills are foundational for building robust, type-safe applications!
Frequently asked questions
Is the “Introduction to Zod Schemas” lesson free?
Yes — the full text of “Introduction to Zod Schemas” is free to read here on the web, and the tRPC End-to-End Type Safe APIs course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the tRPC End-to-End Type Safe APIs course, upgrade to CoddyKit PRO.
What will I learn in “Introduction to Zod Schemas”?
Explore Zod, a TypeScript-first schema declaration and validation library, and its basic types. You practise tRPC End-to-End Type Safe APIs with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start tRPC End-to-End Type Safe APIs?
No prior experience is required. tRPC End-to-End Type Safe APIs on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Introduction to Zod Schemas” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this tRPC End-to-End Type Safe APIs lesson?
Yes. Every tRPC End-to-End Type Safe APIs lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Introduction to Zod Schemas
- Defining Complex Zod Schemas
- Integrating Zod in tRPC Procedures
- Transforming and Refining Zod Data