我需要创建一个函数,该函数使用模型的名称作为参数来显示Prisma模型。每次模型名称可以更改,TypeScript应该自动检查Prisma模型是否存在。
/*
file schema.prisma models:
model User {
id Int @id @default(autoincrement())
name String
password String
job String @default("")
location String @default("")
phone String @default("")
email String
}
model Participant {
id Int @id @default(autoincrement())
userID Int
groupID Int
}
*/
import { PrismaClient } from "@prisma/client";
function loadModel(modelName: /* string */) {
const prisma = new PrismaClient();
const Model = prisma[modelName]
}
loadModel("user")
以下代码将返回错误:
元素隐式地具有“any”类型,因为“string”类型的表达式不能用于索引类型“PrismaClient<PrismaClientOptions,永远不能,RejectOnNotFound| RejectPerOperation| undefined>'。在类型“PrismaClient<PrismaClientOptions,never,RejectOnNotFound”上未找到参数类型为“string”的索引签名|RejectPerOperation| undefined>'。
在这个错误之后,我试图添加到modelName参数: keyof PrismaClient
它的工作,但当我尝试添加类似Model.create({...})-它返回以下错误:
属性'create'不存在于类型'(<V extends“beforeExit”>(eventType:五、回调:(event:V extends“query”?查询事件:V扩展“beforeExit”?()=> Promise:LogEvent)=> void)=> void)|……还有十一个……|MessageDelegate<...>'。属性'create'在类型'<V extends“beforeExit”>上不存在(eventType:五、回调:(event:V extends“query”?查询事件:V扩展“beforeExit”?()=> Promise:LogEvent)=> void)=> void '。
如何解决此问题?
3条答案
按热度按时间h43kikqp1#
您可以使用从@prisma/client和ts-transformer-keys库导入的类型。
hs1ihplo2#
如果您想在Prisma中添加一个开放的功能请求,请在此请求中原生支持:https://github.com/prisma/prisma/issues/5273
r1zhe5dt3#
您会得到错误,因为modelName可以是任何字符串,而它只能接收“user”或“participant”(根据schema.prisma模型)。
因此,要获取您的型号列表,您可以使用Prisma类型获取