# [设计]zod(先进+零依赖+解析不验证)
零依赖
解析,不验证
===
目前在 Zod 中不支持 Date 或 bigint 字面
# plugins
- https://github.com/anatine/zod-plugins (opens new window)
- https://github.com/CarterGrimmeisen/zod-prisma (opens new window)
# Convert
sql --> model --> api(swagger) --> type(ts) --> schema(zod) --> json-schema --> form
- https://github.com/StefanTerdell/zod-to-json-schema (opens new window) @todo
- https://github.com/StefanTerdell/json-schema-to-zod (opens new window)
- https://github.com/fabien0102/ts-to-zod (opens new window) @todo
- https://github.com/sachinraja/zod-to-ts (opens new window)
- https://github.com/lljj-x/vue-json-schema-form/tree/master/pac... (opens new window)
# Comparison
不支持静态类型推理
- Yup
缺少方法: (partial, deepPartial)
缺少 promise 模式
缺少 function 模式
缺少联合和交叉模式
- io-ts
优先考虑功能编程的纯洁性,而不是开发者的经验
难以集成
依赖fp-ts函数式编程库解析结果和处理错误
缺少的方法:(pick, omit, partial, deepPartial, merge, extend)
缺少具有正确类型的非空数组(`[T, ...T[]])。
缺少 promise 模式
缺少 function 模式
===
// io-ts
const A = t.type({
foo: t.string,
});
const B = t.partial({
bar: t.number,
});
const C = t.intersection([A, B]);
type C = t.TypeOf<typeof C>;
===
// zod
const C = z.object({
foo: z.string(),
bar: z.number().optional(),
});
type C = z.infer<typeof C>;
- Runtypes
// 优点
支持 branded 和 readonly 类型,而 Zod 不支持
===
缺少的方法:(deepPartial, merge)
缺少具有适当类型的非空数组(`[T, ...T[]])。
缺少 promise 模式
缺少错误定制功能
- Ow
Ow 专注于函数输入验证, 使复杂的断言语句容易表达的库
支持更多的类型 @eg int32Array
===
但它不能让你解析未定型的数据