© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
Drizzle TeamDT
Drizzle Team•2y ago•
7 replies
codelilac

Struggling to use Zod with Drizzle... Type errors around |undefined

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

export const users = pgTable("users", {
  id: serial("id"),
  name: text("name"),
  email: text("email"),
  password: text("password"),
  role: text("role").$type<"admin" | "user">(),
  createdAt: timestamp("created_at"),
  updatedAt: timestamp("updated_at"),
});

export const insertUserSchema = createInsertSchema(users, {
  role: z.enum(["admin", "user"])
});
//This is supposed to be what we get from the POST request, it omits ID and createdAt/updatedAt fields
export const apiInsertUserSchema = insertUserSchema.omit({ id: true, createdAt: true, updatedAt: true });

export const selectUserSchema = createSelectSchema(users);
import { serial, text, timestamp, pgTable } from "drizzle-orm/pg-core";
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
import { z } from "zod";

export const users = pgTable("users", {
  id: serial("id"),
  name: text("name"),
  email: text("email"),
  password: text("password"),
  role: text("role").$type<"admin" | "user">(),
  createdAt: timestamp("created_at"),
  updatedAt: timestamp("updated_at"),
});

export const insertUserSchema = createInsertSchema(users, {
  role: z.enum(["admin", "user"])
});
//This is supposed to be what we get from the POST request, it omits ID and createdAt/updatedAt fields
export const apiInsertUserSchema = insertUserSchema.omit({ id: true, createdAt: true, updatedAt: true });

export const selectUserSchema = createSelectSchema(users);

import type { FastifyInstance } from "fastify";
// Import drizzle schema
import { users, insertUserSchema, apiInsertUserSchema } from "@api/db/schemas";
import { db } from "@api/db";
import { Logger } from "@api/utils";



export const testRoutes = (fastify: FastifyInstance, _: unknown, done: () => void) => {
  fastify.get("/", async (request, response) => {
    const vists = 0;
    console.log(request);
    response.send({
      hello: "world",
      vists,
    });
  });

  fastify.get("/users", async (request, response) => {
    const allUsers = await db.select().from(users);
    console.log(users);
    response.send(allUsers);
  });

  fastify.post("/users", async (request, response) => {
    console.log(request);
    try {
      let parsedRequest = apiInsertUserSchema.parse(request.body);
      console.log("request body: ", request.body);
      console.log("parsed request: ", parsedRequest);
      await db.insert(users).values(parsedRequest);
    } catch (error) {
      console.log(error);
      Logger.error("POST /users", `${error}`);
      response.status(400).send({ error: "Invalid request body" });
    }

  });
import type { FastifyInstance } from "fastify";
// Import drizzle schema
import { users, insertUserSchema, apiInsertUserSchema } from "@api/db/schemas";
import { db } from "@api/db";
import { Logger } from "@api/utils";



export const testRoutes = (fastify: FastifyInstance, _: unknown, done: () => void) => {
  fastify.get("/", async (request, response) => {
    const vists = 0;
    console.log(request);
    response.send({
      hello: "world",
      vists,
    });
  });

  fastify.get("/users", async (request, response) => {
    const allUsers = await db.select().from(users);
    console.log(users);
    response.send(allUsers);
  });

  fastify.post("/users", async (request, response) => {
    console.log(request);
    try {
      let parsedRequest = apiInsertUserSchema.parse(request.body);
      console.log("request body: ", request.body);
      console.log("parsed request: ", parsedRequest);
      await db.insert(users).values(parsedRequest);
    } catch (error) {
      console.log(error);
      Logger.error("POST /users", `${error}`);
      response.status(400).send({ error: "Invalid request body" });
    }

  });


I'm attemping to perform validation and inserting with Zod... however, I'm getting errors around the fact the generated schema includes |undefined in each of the rows... Is there a way around this? Sorry for the noob question.
Drizzle TeamJoin
The official Discord for all Drizzle related projects, such as Drizzle ORM, Drizzle Kit, Drizzle Studio and more!
11,879Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

drizzle-zod type errors with latest versions
Drizzle TeamDTDrizzle Team / help
3y ago
Drizzle-zod errors
Drizzle TeamDTDrizzle Team / help
2y ago
Drizzle with Zod throws type errors with simple `numeric` example
Drizzle TeamDTDrizzle Team / help
2y ago
drizzle-zod type infer
Drizzle TeamDTDrizzle Team / help
3y ago