我目前正在开发一个项目,尝试实现一个通用服务来列出我的应用程序中任何 Prisma 模型的所有条目。我将 TypeScript 与 Prisma 结合使用,其想法是将 Prisma 模型动态传递给此服务函数并让它返回 findMany 查询的结果。
这是我到目前为止的代码:
import { PrismaClient } from '@prisma/client'
type PrismaClientMethod = '$on' | '$connect' | '$disconnect' | '$use' | '$executeRaw' | '$executeRawUnsafe' | '$queryRaw' | '$queryRawUnsafe' | '$transaction'
type PrismaModelName = keyof Omit<PrismaClient, PrismaClientMethod>
type PrismaModel = PrismaClient[PrismaModelName]
export const genericPrismaListService = async <T extends PrismaModel>(model: T) => {
return model.findMany()
}
但是,当我尝试使用这个 genericPrismaListService 时,我遇到了 findMany 方法似乎无法被识别的问题。我收到 TypeScript 错误,表明 T 类型上不存在 findMany。我的理解是,由于我从 Prisma 传递模型,因此 findMany 方法应该在任何 Prisma 模型上可用,但情况似乎并非如此在这里。
我是否在通用函数中错误地输入了模型,或者我在 TypeScript 中一般使用 Prisma 模型的方式是否存在另一个问题?我该怎么做才能确保 findMany (以及其他特定于模型的方法,如创建、更新等)在传递的模型上可用?
任何关于如何正确输入此函数并使 findMany 工作的帮助将不胜感激。预先感谢您!
import { PrismaClient, Prisma } from '@prisma/client'
// Define the type for model names
type PrismaModelName = keyof PrismaClient
// Define the type for the model methods
type PrismaModel = PrismaClient[PrismaModelName]
export const genericPrismaListService = async <T extends PrismaModel>(modelName: PrismaModelName) => {
const prisma = new PrismaClient()
// Access the model dynamically
const model = prisma[modelName] as T
// Call findMany on the model
return model.findMany()
}