Become a Gold Sponsor

drizzle-zod

drizzle-zod 是一个用于 Drizzle ORM 的插件,它允许你从 Drizzle ORM 模式生成 Zod 模式。

安装依赖

npm
yarn
pnpm
bun
npm i drizzle-zod

用法

import { pgEnum, pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core';
import { createInsertSchema, createSelectSchema } from 'drizzle-zod';
import { z } from 'zod';

const users = pgTable('users', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
  email: text('email').notNull(),
  role: text('role', { enum: ['admin', 'user'] }).notNull(),
  createdAt: timestamp('created_at').notNull().defaultNow(),
});

// 插入用户的模式 - 可用于验证 API 请求
const insertUserSchema = createInsertSchema(users);

// 选择用户的模式 - 可用于验证 API 响应
const selectUserSchema = createSelectSchema(users);

// 重写字段
const insertUserSchema = createInsertSchema(users, {
  role: z.string(),
});

// 精细化字段 - 如果你想在字段变为可空/可选之前更改字段,这很有用
const insertUserSchema = createInsertSchema(users, {
  id: (schema) => schema.id.positive(),
  email: (schema) => schema.email.email(),
  role: z.string(),
});

// 用法

const user = insertUserSchema.parse({
  name: 'John Doe',
  email: 'johndoe@test.com',
  role: 'admin',
});

// Zod 模式类型也从表模式中推断,因此你拥有完整的类型安全
const requestSchema = insertUserSchema.pick({ name: true, email: true });