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 });
Become a Gold Sponsor