为什么 findMany 在我的通用 Prisma 服务中不起作用,我该如何修复它?

问题描述 投票:0回答:1

我目前正在开发一个项目,尝试实现一个通用服务来列出我的应用程序中任何 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 工作的帮助将不胜感激。预先感谢您!

typescript orm typescript-generics prisma
1个回答
0
投票
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()
}
© www.soinside.com 2019 - 2024. All rights reserved.