Skip to content

支持的类型

zod-codepen 支持 40+ 种 Zod 模式类型。本文档列出所有支持的类型及其序列化结果。

基础类型

类型Zod 代码序列化结果
Stringz.string()'z.string()'
Numberz.number()'z.number()'
Booleanz.boolean()'z.boolean()'
BigIntz.bigint()'z.bigint()'
Datez.date()'z.date()'
Undefinedz.undefined()'z.undefined()'
Nullz.null()'z.null()'
Voidz.void()'z.void()'
Anyz.any()'z.any()'
Unknownz.unknown()'z.unknown()'
Neverz.never()'z.never()'
NaNz.nan()'z.nan()'
Symbolz.symbol()'z.symbol()'

字面量和枚举

类型Zod 代码序列化结果
String Literalz.literal('hello')'z.literal("hello")'
Number Literalz.literal(42)'z.literal(42)'
Boolean Literalz.literal(true)'z.literal(true)'
Enumz.enum(['a', 'b'])'z.enum(["a", "b"])'
Native Enumz.nativeEnum(Status)'z.nativeEnum(/* native enum */)'

字符串约束

约束Zod 代码序列化结果
Min Lengthz.string().min(5)'z.string().min(5)'
Max Lengthz.string().max(100)'z.string().max(100)'
Exact Lengthz.string().length(10)'z.string().length(10)'
Emailz.string().email()'z.string().email()'
URLz.string().url()'z.string().url()'
UUIDz.string().uuid()'z.string().uuid()'
CUIDz.string().cuid()'z.string().cuid()'
CUID2z.string().cuid2()'z.string().cuid2()'
ULIDz.string().ulid()'z.string().ulid()'
DateTimez.string().datetime()'z.string().datetime()'
IPz.string().ip()'z.string().ip()'
Emojiz.string().emoji()'z.string().emoji()'
Regexz.string().regex(/^a/)'z.string().regex(/^a/)'
Starts Withz.string().startsWith('hi')'z.string().startsWith("hi")'
Ends Withz.string().endsWith('!')'z.string().endsWith("!")'
Includesz.string().includes('test')'z.string().includes("test")'
Trimz.string().trim()'z.string().trim()'
To Lowerz.string().toLowerCase()'z.string().toLowerCase()'
To Upperz.string().toUpperCase()'z.string().toUpperCase()'

数字约束

约束Zod 代码序列化结果
Min (> 0)z.number().min(0)'z.number().nonnegative()'
Min (> n)z.number().min(5)'z.number().min(5)'
Maxz.number().max(100)'z.number().max(100)'
Positivez.number().positive()'z.number().positive()'
Negativez.number().negative()'z.number().negative()'
Nonnegativez.number().nonnegative()'z.number().nonnegative()'
Nonpositivez.number().nonpositive()'z.number().nonpositive()'
Integerz.number().int()'z.number().int()'
Finitez.number().finite()'z.number().finite()'
Safez.number().safe()'z.number().safe()'
Multiple Ofz.number().multipleOf(5)'z.number().multipleOf(5)'

BigInt 约束

约束Zod 代码序列化结果
Minz.bigint().min(0n)'z.bigint().min(0n)'
Maxz.bigint().max(100n)'z.bigint().max(100n)'
Positivez.bigint().positive()'z.bigint().positive()'
Negativez.bigint().negative()'z.bigint().negative()'

Date 约束

约束Zod 代码序列化结果
Minz.date().min(new Date())'z.date().min(/* Date */)'
Maxz.date().max(new Date())'z.date().max(/* Date */)'

集合类型

类型Zod 代码序列化结果
Arrayz.array(z.string())'z.array(z.string())'
Array Minz.array(z.string()).min(1)'z.array(z.string()).min(1)'
Array Maxz.array(z.string()).max(10)'z.array(z.string()).max(10)'
Array Nonemptyz.array(z.string()).nonempty()'z.array(z.string()).nonempty()'
Objectz.object({ a: z.string() })多行格式化输出
Recordz.record(z.string(), z.number())'z.record(z.string(), z.number())'
Mapz.map(z.string(), z.number())'z.map(z.string(), z.number())'
Setz.set(z.string())'z.set(z.string())'
Set Minz.set(z.string()).min(1)'z.set(z.string()).min(1)'
Set Maxz.set(z.string()).max(10)'z.set(z.string()).max(10)'
Tuplez.tuple([z.string(), z.number()])'z.tuple([z.string(), z.number()])'
Tuple Restz.tuple([z.string()]).rest(z.number())'z.tuple([z.string()]).rest(z.number())'

对象修饰符

修饰符Zod 代码序列化结果
Partialz.object({...}).partial()'z.object({...}).partial()'
Requiredz.object({...}).required()'z.object({...}).required()'
Passthroughz.object({}).passthrough()'z.object({}).passthrough()'
Strictz.object({}).strict()'z.object({}).strict()'
Pickz.object({...}).pick({ a: true })'z.object({...}).pick({ a: true })'
Omitz.object({...}).omit({ a: true })'z.object({...}).omit({ a: true })'
Extendz.object({}).extend({ b: z.number() })'z.object({...})'
Mergeschema1.merge(schema2)'z.object({...})'

联合类型

类型Zod 代码序列化结果
Unionz.union([z.string(), z.number()])'z.union([z.string(), z.number()])'
Discriminated Unionz.discriminatedUnion('type', [...])'z.discriminatedUnion("type", [...])'
Intersectionz.intersection(a, b)'z.intersection(a, b)'

包装器

类型Zod 代码序列化结果
Optionalz.string().optional()'z.string().optional()'
Nullablez.string().nullable()'z.string().nullable()'
Nullishz.string().nullish()'z.string().nullable().optional()'
Defaultz.string().default('hi')'z.string().default("hi")'
Catchz.string().catch('fallback')'z.string().catch("fallback")'
Readonlyz.object({}).readonly()'z.object({}).readonly()'
Brandedz.string().brand<'Id'>()'z.string().brand()'

效果器

类型Zod 代码序列化结果
Refinez.string().refine(fn)'z.string().refine(/* function */)'
SuperRefinez.string().superRefine(fn)'z.string().superRefine(/* function */)'
Transformz.string().transform(fn)'z.string().transform(/* function */)'
Preprocessz.preprocess(fn, z.string())'z.preprocess(/* function */, z.string())'
Pipez.string().pipe(z.number())'z.string().pipe(z.number())'

其他类型

类型Zod 代码序列化结果
Promisez.promise(z.string())'z.promise(z.string())'
Functionz.function()'z.function()'
Function with Argsz.function().args(z.string())'z.function().args(z.string())'
Function with Returnsz.function().returns(z.number())'z.function().returns(z.number())'
Lazyz.lazy(() => z.string())'z.lazy(() => /* ... */)'
instanceofz.instanceof(Date)'z.instanceof(/* class */)'
Customz.custom()'z.custom()'

强制转换

类型Zod 代码序列化结果
Coerce Stringz.coerce.string()'z.coerce.string()'
Coerce Numberz.coerce.number()'z.coerce.number()'
Coerce Booleanz.coerce.boolean()'z.coerce.boolean()'
Coerce BigIntz.coerce.bigint()'z.coerce.bigint()'
Coerce Datez.coerce.date()'z.coerce.date()'

限制说明

不可序列化的内容

以下内容无法完全序列化,会用占位符表示:

  • 函数体 - /* function */
  • 类引用 - /* class */
  • 原生枚举 - /* native enum */
  • 惰性模式内容 - /* ... */

v4 限制

在 Zod v4 中,以下功能可能无法正确序列化:

  • 字符串转换(trim, toLowerCase, toUpperCase)
  • refine 检测
  • brand 检测
  • function.args()

Released under the MPL 2.0 License.