最近更新版本的“@types/node”正在创建一个错误。之前的版本运行良好

Jak*_*iri 3 javascript typescript prisma

我收到这个错误

error TS2694: Namespace 'NodeJS' has no exported member 'Global'.
4 interface CustomNodeJsGlobal extends NodeJS.Global 
Run Code Online (Sandbox Code Playgroud)

运行此程序时

import { PrismaClient } from "@prisma/client";

// add prisma to the NodeJS global type
interface CustomNodeJsGlobal extends NodeJS.Global {
  prisma: PrismaClient;
}

// Prevent multiple instances of Prisma Client in development
declare const global: CustomNodeJsGlobal;

const prisma = global.prisma || new PrismaClient();

if (process.env.NODE_ENV === "development") global.prisma = prisma;

export default prisma;
Run Code Online (Sandbox Code Playgroud)

这是版本的问题@types/node
--> 与"@types/node": "^15.4.0"(我记不太清了,但是是从15(15.xx)开始的)
--> 更新到最新版本后显示错误"@types/node": "^16.3.0"

使它与最新版本一起工作的标准方法是什么"@types/node": "^16.3.0",

ale*_*xor 8

截至node@16NodeJS.Global界面已被删除,以支持globalThis.

您可以在模块文件中声明新的全局变量:

declare global {
  var NEW_GLOBAL: string;
}
Run Code Online (Sandbox Code Playgroud)

在非模块文件(无顶级导入/导出)中为:

declare var NEW_GLOBAL: string;
Run Code Online (Sandbox Code Playgroud)

重要提示:变量必须声明为var. letconst变量未显示在 上globalThis

因此,您的代码可以重写为:

import { PrismaClient } from "@prisma/client";

declare global {
  var prisma: PrismaClient;
}

const prisma = global.prisma || new PrismaClient();

if (process.env.NODE_ENV === "development") global.prisma = prisma;

export default prisma;
Run Code Online (Sandbox Code Playgroud)

  • 请务必阅读粗体字母,我没有阅读,并且损失了大约 3 个小时 (3认同)