菜单

原始 Schema

相关源文件

本文档涵盖了 Zod 中的原始 schema 类型,它们是输入验证和类型安全的基础构建块。原始 schema 处理字符串、数字、布尔值和其他 JavaScript 原始类型等基本数据类型。有关对象和数组等更复杂 schema 类型的信息,请参阅对象 Schema数组和元组 Schema

概述

Zod 中的原始 schema 为 JavaScript 的原始数据类型提供验证。每个 schema 都包含用于创建、验证和转换其类型值的方法。

来源: src/types.ts50-54 README.md706-730

创建原始 Schema

所有原始 schema 均通过调用 z 命名空间中对应的工厂函数来创建。

来源: README.md706-730 src/types.ts773-778 src/__tests__/primitive.test.ts14-20

Schema 层次结构和类型系统

原始 schema 继承自抽象的 ZodType 类,该类为所有 schema 类型提供通用方法。

来源: src/types.ts169-577

字符串 Schema

字符串 schema 验证输入是否为字符串,并提供特定于字符串的附加验证方法。

基本用法

字符串验证

字符串 schema 提供多种验证方法

方法描述示例
min(length)最小长度z.string().min(5)
max(length)最大长度z.string().max(10)
length(length)精确长度z.string().length(8)
email()有效电子邮件格式z.string().email()
url()有效 URL 格式z.string().url()
emoji()仅包含表情符号z.string().emoji()
uuid()有效 UUID 格式z.string().uuid()
regex(pattern)匹配正则表达式z.string().regex(/^\d+$/)
includes(string)包含子字符串z.string().includes("test")
startsWith(string)以子字符串开头z.string().startsWith("https://")
endsWith(string)以子字符串结尾z.string().endsWith(".com")
datetime()ISO 8601 日期时间z.string().datetime()
ip()IP 地址z.string().ip()
nonempty()非空字符串z.string().nonempty()

来源: README.md814-854 src/types.ts774-854 src/__tests__/string.test.ts7-14

字符串转换

字符串 schema 还提供转换输入字符串的方法

来源: README.md839-841

数字 Schema

数字 schema 验证输入是否为数字,并提供附加验证方法。

基本用法

数字验证

方法描述示例
min(value)最小值(包含)z.number().min(5)
max(value)最大值(包含)z.number().max(10)
positive()大于 0z.number().positive()
negative()小于 0z.number().negative()
nonpositive()小于或等于 0z.number().nonpositive()
nonnegative()大于或等于 0z.number().nonnegative()
int()整数(无小数)z.number().int()
gt(value)大于z.number().gt(5)
gte(value)大于或等于z.number().gte(5)
lt(value)小于z.number().lt(5)
lte(value)小于或等于z.number().lte(5)
step(step)步长的倍数z.number().step(0.1)

来源: src/__tests__/validations.test.ts82-131 README.md91-95

布尔值 Schema

布尔值 schema 验证输入是否为布尔值(true 或 false)。

来源: src/__tests__/primitive.test.ts18 README.md94

BigInt Schema

BigInt schema 验证输入是否为 BigInt。

来源: src/__tests__/primitive.test.ts17 README.md92

日期 Schema

日期 schema 验证输入是否为 JavaScript Date 对象。

来源: src/__tests__/primitive.test.ts19 README.md95

Symbol Schema

Symbol schema 验证输入是否为 JavaScript Symbol。

来源: src/__tests__/primitive.test.ts20 README.md96

Null 和 Undefined

Zod 提供用于验证 nullundefined 值的 schema。

来源: src/__tests__/primitive.test.ts22-23 README.md718-720

包罗万象的类型:Any 和 Unknown

Zod 提供两种处理无类型或未知数据的 schema

主要区别在于,z.any() 允许您直接使用值,而 z.unknown() 则在使用前需要进一步验证,使其更安全。

来源: README.md723-726

Never 类型

never schema 不允许任何值,并在验证期间始终抛出错误

这主要用于泛型类型或明确标记不应到达的 schema 分支。

来源: README.md727-730

原始类型的强制转换

Zod 提供了一种方便的方式将值强制转换为原始类型

强制转换通过将输入传递给 JavaScript 的内置构造函数(如 String()Number()Boolean()new Date())来完成。

来源: README.md735-789

字面量 Schema

除了验证类型的原始 schema 外,Zod 还提供验证特定值的字面量 schema。

可以为字符串、数字、布尔值和 BigInt 创建字面量 schema。

来源: README.md792-810 src/__tests__/primitive.test.ts8-13

所有 Schema 的通用方法

所有原始 schema 都继承自 ZodType 类中的通用方法

方法描述
parse(data)验证数据并返回,否则抛出错误
safeParse(data)验证数据并返回结果对象
optional()使 schema 接受 undefined
nullable()使 schema 接受 null
nullish()使 schema 同时接受 null 和 undefined
refine(check)添加自定义验证逻辑
transform(fn)验证后转换数据

来源: src/types.ts241-576 src/__tests__/optional.test.ts21-38 src/__tests__/nullable.test.ts20-37

类型推断

Zod 最强大的功能之一是自动类型推断。TypeScript 可以从 schema 自动推断输出类型

这使得您的运行时验证和静态类型能够自动保持同步。

来源: README.md697-700