Prisma + TypeScriptで、DBにINSERTするパラメータの型を取得する

PrismaでINSERTする場合、メソッドの引数にアイテムの情報を渡します。

await prisma.user.create({
     data: {
         name: 'Alice',
         email: 'alice@example.com'
     }
 })

ただし場合によっては、アイテムの中身を条件分岐させる実装が必要になります。

const user = {
     name: 'Alice',
     email: 'alice@example.com'
 }

 // 引数にデータがあるなら追加する
 if (props.age) {
     user.age = props. age
 }
 await prisma.user.create({
     data: props
 })

この場合、 TypeScriptではuserの型を指定しなければなりません。

TypeScriptでは、Prisma.<ModelName>CreateInput をつかう

自前で型を設定してもよいのですが、Prisma側に型データがあるのでこれを使いましょう。

import { Prisma, PrismaClient } from "@prisma/client";

const prisma = new PrismaClient()

const userData: Prisma.UserCreateInput = {
    name: 'Alice',
    email: 'alice@example.com'
}

// 引数にデータがあるなら追加する
if (props.age) {
    user.age = props. age
}

const user = await prisma.user.create({
    data: userData
})
await prisma.$disconnect()

Relation先のデータなども型定義されていますので、覚えてしまえば便利です。

UPDATE / SELECT / WHEREなどにも対応

ざっとIDEでコードを追っただけですが、大体のSQL操作に必要な型は自動生成される様子です。

type UserUpdateInpput = Prisma.UserUpdateInput
type UserSelect = Prisma.UserSelect
type UserWhere = Prisma.UserWhereInput

findFirstfindManyの引数そのものの型もあります。

type UserFindManyArgs = Prisma.UserFindManyArgs
type UserFindFirstArgs = Prisma.UserFindFirstArgs

Comment