prismaの型エラーの解決法


prismaの型エラー

prismaではprisma generate というコマンドを使うことでschema.prismaにあるデータモデルの型を自動で作ってくれるという機能がありますが、それを知らず、ずっと型エラーで苦しんでいたので、似たような症状で悩んでいる人のためにこの記事で解決法を共有したいと思います。

どういうエラー?

型が作成されていないと、dbに続くプロパティに対して「プロパティ 'task' は型 '型の名前' に存在しません。ts(2339)」といったエラーが出ます

import type { NextApiRequest, NextApiResponse } from "next"
import db from "db"

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  switch (req.method) {
    case "GET":
      const tasks = await db.task.findMany()  // dbに続くプロパティで型エラー
      return res.status(200).json(tasks)
    case "POST":
      const task = await db.task.create({
        data: {
          title: req.body.title,
          user: req.body.user,
        },
      })
      return res.status(200).json(task)
    default:
      return res.send("method not allowed")
  }
}

prismaは@prisma/clientからprismaあるいはPrismaClientをimportすることでデータベースに対してリクエストを送ったりできるようになります(Nextjsの場合)
私はBlitzjsというReactフレームワークを利用しているので、少し書き方が異なります。
prismaの代わりにimport db from "db"という記述をしています

解決法

上記に記したようにprisma generateを実行すると自動的に型を作ってくれます
私の場合はそれで解決しました
また、私はNextjsではなくBlitzjsを使っており、enhancePrismaという機能を利用しているので、通常のprismaの書き方とは少し異なるので、その違いについてもどこかで紹介したいと思います