如何解决全局 node.js 对象上的此打字稿错误
How to resolve this typescript error on global node.js object
我正在按照本指南 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 的目的。
根据docs需要先声明变量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
,其中包含声明。
我可以将严格模式重现为 true 和 @types/node
包版本 16
更新:在此处查看文档推荐的其他答案
这应该有效:
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;
我正在按照本指南 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 的目的。
根据docs需要先声明变量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
,其中包含声明。
我可以将严格模式重现为 true 和 @types/node
包版本 16
更新:在此处查看文档推荐的其他答案
这应该有效:
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;