7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PrismaのEnumをZodのスキーマとして使う方法

Posted at

はじめに

ZodでPrismaのEnumをスキーマとして利用しようとした際にz.enum()では出来なかったので、
少し調べてみました。

TL;DR

ZodのnativeEnumメソッドを使ってPrisma等のサードパーティーEnumをSchemaとして利用することができます。

PrismaのSchemaに任意のEnumを追加

prisma.schemaファイル上で任意のenumを以下のように定義します。

// prisma.schema
...

// Prismaのenum定義
enum Bar {
// 任意の値、この場合はいずれかの文字列のみ
  ENUMA
  ENUMB
}

ZodのSchemaファイルを作成

次に、以下のようにZodのSchemaファイルを作成します。

import { z } from 'zod'
import { Bar } from '@prisma/client' // Prisma clientからenumが型付きでインポートできる。

// z.nativeEnumを用いるとPrisma等のEnumを渡す事が出来ます。
export const FooEnumSchema = z.nativeEnum(Bar)

// 型生成
export type FooEnum = z.infer<typeof FooEnumSchema>

// 使用例
const FooSchema = z.object({
	fooText: z.string(),
	fooKey: FooEnumSchema // ここでPrismaのEnumをSchemaとして利用しています。
})

まとめ

以上、PrismaのEnumをZodのスキーマとして使う方法でした。

※ 今思えば、公式ドキュメントには普通に書いてあったので一次情報をすぐに見に行くべきでした。(反省)

参考文献

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?