zod
约 2 分钟阅读
- colinhacks/zodGitHubcolinhacks/zodcolinhacks/zod · adpoted by: tRPC · 参考 · zod.dev · StefanTerdell/zod-to-json-schema · fabien0102/ts-to-zod · asteasolutions/zod-to-openapi笔记:zod
- adpoted by: tRPC笔记trpctrpc/trpc · @trpc/next - NextJS · spec · https://trpc.io/docs/rpc · 参考 · jlalmes/trpc-openapi · 使用 meta 定义路由 · - · 使用 zod 定义 input 和 output打开:/notes/web/script/lib/trpc
- 参考
- zod.dev链接zod.devcolinhacks/zod · adpoted by: tRPC · 参考 · zod.dev · StefanTerdell/zod-to-json-schema · fabien0102/ts-to-zod · asteasolutions/zod-to-openapi笔记:zod
- StefanTerdell/zod-to-json-schemaGitHubStefanTerdell/zod-to-json-schemacolinhacks/zod · adpoted by: tRPC · 参考 · zod.dev · StefanTerdell/zod-to-json-schema · fabien0102/ts-to-zod · asteasolutions/zod-to-openapi笔记:zod
- fabien0102/ts-to-zodGitHubfabien0102/ts-to-zodcolinhacks/zod · adpoted by: tRPC · 参考 · zod.dev · StefanTerdell/zod-to-json-schema · fabien0102/ts-to-zod · asteasolutions/zod-to-openapi笔记:zod
- asteasolutions/zod-to-openapiGitHubasteasolutions/zod-to-openapicolinhacks/zod · adpoted by: tRPC · 参考 · zod.dev · StefanTerdell/zod-to-json-schema · fabien0102/ts-to-zod · asteasolutions/zod-to-openapi笔记:zod
- Effect-TS/schemaGitHubEffect-TS/schema
- 有点类似 Typebox 定义 schema 的感觉
- parse 会返回 clone 的对象
- 所以性能会差一点 #205GitHub Issuecolinhacks/zod#205
- 使用 proxy 对象时需要注意
- 例如不能配合 immer、valtio 使用
- #1769GitHub Issuecolinhacks/zod#1769
- #2030GitHubcolinhacks/zod/discussions/2030
- Serialize
- Serialize 推荐 JSONSchema - 减少部分校验,但能用到更多场景
- v4
- fabien0102/ts-to-zod#307GitHub Issuefabien0102/ts-to-zod#307
// 校验合法 JSON 对象
const LiteralSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
type Literal = z.infer<typeof LiteralSchema>;
type Json = Literal | { [key: string]: Json } | Json[];
const JsonSchema: z.ZodType<Json> = z.lazy(() => z.union([LiteralSchema, z.array(JsonSchema), z.record(JsonSchema)]));openapi
- asteasolutions/zod-to-openapiGitHubasteasolutions/zod-to-openapicolinhacks/zod · adpoted by: tRPC · 参考 · zod.dev · StefanTerdell/zod-to-json-schema · fabien0102/ts-to-zod · asteasolutions/zod-to-openapi笔记:zod
import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi';
import { z } from 'zod';
// 增加 openapi 方法
extendZodWithOpenApi(z);
// 支持定义额外数据
z.string().openapi({ description: 'Some string' });- 使用 registry 定义接口方法
- 通过 schema 定义的对象默认会包含在 registry 中
import { OpenAPIRegistry, OpenApiGeneratorV3 } from '@asteasolutions/zod-to-openapi';
const registry = new OpenAPIRegistry();
// Registry 也可以定义 Schema
const UserSchema = registry.register(
'User',
z.object({
id: z.string().openapi({ example: '1212121' }),
name: z.string().openapi({ example: 'John Doe' }),
age: z.number().openapi({ example: 42 }),
}),
);
// 定义接口
registry.registerPath({
method: 'get',
path: '/users/{id}',
description: 'Get user data by its id',
summary: 'Get a single user',
request: {
params: z.object({
id: z.string().openapi({ example: '1212121' }),
}),
},
responses: {
200: {
description: 'Object with user data.',
content: {
'application/json': {
schema: UserSchema,
},
},
},
204: {
description: 'No content - successful operation',
},
},
});
const generator = new OpenApiGeneratorV3(registry.definitions);
// 生成文档
generator.generateComponents();Version
- v4.5
- z.compile
- import "zod/compile"; 在定义 schema 之前 import 自动默认都走 compile
- z.properties
- z.deepPartial
- z.validate()
- zod.dev/blog/zod-4-5
- z.compile
- v4
- 拆分 core, mini, 完整
- 支持直接生成 jsonschema
关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- JavaScript Awesome笔记 · zod
novnc/noVNC · felixrieseberg/macintosh.js · RobinCsl/awesome-js-tooling-not-in-js · sorrycc/awesome-javascript · CLI / Table
站内链接
- trpc笔记 · tRPC
trpc/trpc · @trpc/next - NextJS · spec · https://trpc.io/docs/rpc · 参考 · jlalmes/trpc-openapi · 使用 meta 定义路由 · - · 使用 zod 定义 input 和 output
参考资料
GitHub9 条
- asteasolutions/zod-to-openapigithub.com/asteasolutions/zod-to-openapi
- colinhacks/zodgithub.com/colinhacks/zod
- colinhacks/zod/discussions/2030github.com/colinhacks/zod/discussions/2030
- colinhacks/zod#1769github.com/colinhacks/zod/issues/1769
- colinhacks/zod#205github.com/colinhacks/zod/issues/205
- Effect-TS/schemagithub.com/Effect-TS/schema
- fabien0102/ts-to-zodgithub.com/fabien0102/ts-to-zod
- fabien0102/ts-to-zod#307github.com/fabien0102/ts-to-zod/issues/307
- StefanTerdell/zod-to-json-schemagithub.com/StefanTerdell/zod-to-json-schema
其他外链2 条
- zod.devzod.dev/
- zod.dev/blog/zod-4-5zod.dev/blog/zod-4-5