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

PrismaでINSERTする場合、メソッドの引数にアイテムの情報を渡します。 ただし場合によっては、アイテムの中身を条件分岐させる実装が必要になります。 この場合、 TypeScriptではuserの型を指定しなければ […]

広告ここから
広告ここまで

目次

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

    await prisma.user.create({
         data: {
             name: 'Alice',
             email: '[email protected]'
         }
     })

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

    const user = {
         name: 'Alice',
         email: '[email protected]'
     }
    
     // 引数にデータがあるなら追加する
     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: '[email protected]'
    }
    
    // 引数にデータがあるなら追加する
    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

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark