如何解决全局node.js对象上的这个typescript错误



我遵循本指南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,其中包含声明

最新更新