我遵循本指南https://vercel.com/guides/nextjs-prisma-postgres创建一个完整的堆栈应用程序。Typescript在以下代码段中引发错误:
import { PrismaClient } from '@prisma/client';
let prisma: PrismaClient;
if (process.env.NODE_ENV === 'production') {
prisma = new PrismaClient();
} else {
if (!global.prisma) {
global.prisma = new PrismaClient();
}
prisma = global.prisma;
}
export default prisma;
TypeScript正在global.prisma
:上抛出ts7017
Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.
有人能帮我理解这一点以及如何解决吗?在此期间,我在tsconfig中将"strict"设置为false,这在这段时间内抑制了这个问题,尽管我确信关闭它会破坏TS的目的。
我可以在严格模式为true和@types/node
包版本16 的情况下重现相同的错误
更新:请参阅此处文档中推荐的其他答案https://stackoverflow.com/a/69851359/1345244
这应该有效:
declare global {
var prisma: PrismaClient; // This must be a `var` and not a `let / const`
}
import { PrismaClient } from "@prisma/client";
let prisma: PrismaClient;
if (process.env.NODE_ENV === "production") {
prisma = new PrismaClient();
} else {
if (!global.prisma) {
global.prisma = new PrismaClient();
}
prisma = global.prisma;
}
export default prisma;
根据文档,您需要首先声明变量global
:
import { PrismaClient } from '@prisma/client'
declare global {
var prisma: PrismaClient | undefined
}
export const prisma =
global.prisma ||
new PrismaClient({
log: ['query'],
});
if (process.env.NODE_ENV !== 'production') global.prisma = prisma;
您还可以有一个单独的文件globals.d.ts
,其中包含声明