Last Updated: 3/12/2026
Coercion
Coercion automatically converts input types before validation.
Basic Coercion
import * as z from "zod";
const CoercedNumber = z.coerce.number();
CoercedNumber.parse("42"); // => 42 (number)
CoercedNumber.parse(42); // => 42
CoercedNumber.parse(true); // => 1Coercion Types
z.coerce.string(); // Calls String(input)
z.coerce.number(); // Calls Number(input)
z.coerce.boolean(); // Calls Boolean(input)
z.coerce.bigint(); // Calls BigInt(input)
z.coerce.date(); // Calls new Date(input)Coercion with Validation
const PositiveNumber = z.coerce.number().positive();
PositiveNumber.parse("42"); // => 42
PositiveNumber.parse("-5"); // ✗ not positiveUse Cases
Coercion is useful for:
- Query parameters (always strings) to numbers
- Form inputs to typed values
- Environment variables to booleans/numbers
- API responses with inconsistent types
Coercion vs. Transforms
- Coercion: Built-in type conversion using JavaScript constructors
- Transforms: Custom conversion logic you define
What’s Next
- Transforms — Custom data conversion
- Defining Schemas — Learn about primitive types