Zod
TOC
动机
zod
是一个工具库,有一些特性:
- 在运行时校验数据结构
- 转换数据结构
- ...
例如常规情况下的一个数据结构
ts
interface User {
username: string
}
在使用中,例如从后端拿到的数据结构:
ts
function buildUser(from: any) {
return { ...from } as User
}
由于 TS 只存在于编译期,那么实际上在运行期,这样的代码是不安全的。
所以就可以
ts
const userSchema = z.object({
username: z.string()
})
function buildUser(from: any) {
// 假设 from 无法满足 userSchema 的要求,则这里会报错,在开发阶段就能发现问题
return userSchema.parse(from)
}
基础用法
1. 基础类型
Zod 支持以下几种基础类型
ts
import { z } from 'zod'
// primitive values
z.string()
z.number()
z.bigint()
z.boolean()
z.date()
z.symbol()
// empty types
z.undefined()
z.null()
z.void() // accepts undefined
// catch-all types
// allows any value
z.any()
z.unknown()
// never type
// allows no values
z.never()
2. Zod 转 TS
可以使用 z.infer
来获取 Zod 的类型
ts
const A = z.string()
type A = z.infer<typeof A> // string
const u: A = 12 // TypeError
const u: A = 'asdf' // compiles