使用Prisma与TypeScript时,如何修复‘Element implicitly has an any type’错误?
解决Prisma + TypeScript动态模型查询的类型错误
你的问题出在TypeScript无法确认传入的model字符串是PrismaClient上存在的合法模型名称,所以索引时会抛出隐式any类型的错误。以下是具体的修复方案:
步骤1:定义合法的模型名称类型
首先从你的PrismaClient实例中提取所有非内置方法(即排除$开头的属性)的键,作为合法的模型名称类型:
// 假设你的PrismaClient实例名为prisma type PrismaModelName = Exclude<keyof typeof prisma, `$${string}`>;
步骤2:修改函数的类型约束
将model参数的类型从宽泛的string改为上述定义的PrismaModelName,同时让函数返回值自动对应模型的正确类型:
export async function getAll<T extends PrismaModelName>(model: T) { const results = await prisma[model].findMany(); await prisma.$disconnect(); // 自动推导返回值类型,避免any return results as Awaited<ReturnType<typeof prisma[T]['findMany']>>; }
额外提示
注意:每次调用函数都执行prisma.$disconnect()不是最佳实践。PrismaClient会自动管理连接池,建议在应用启动时初始化一次客户端,直到应用关闭时再断开连接,而不是每次查询后都断开。
内容的提问来源于stack exchange,提问作者Steeve
相关产品推荐
相关产品推荐

