javascript - 最近更新的 `@types/node` 版本正在创建错误。以前的版本工作正常

标签 javascript typescript prisma

我遇到了这个错误

error TS2694: Namespace 'NodeJS' has no exported member 'Global'.
4 interface CustomNodeJsGlobal extends NodeJS.Global 

运行时

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;

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

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

最佳答案

node@16 开始,NodeJS.Global 接口(interface) has been removed赞成globalThis .

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

declare global {
  var NEW_GLOBAL: string;
}

并且在非模块文件中(没有顶级导入/导出)作为:

declare var NEW_GLOBAL: string;

重要提示:变量必须声明为 varletconst 变量不会出现在 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;

关于javascript - 最近更新的 `@types/node` 版本正在创建错误。以前的版本工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68322578/

相关文章:

javascript - 多边形SVG的不同笔画

javascript - 使用 Webpack 时 Typescript 编译器 "cannot find module"需要 CSS/图像 Assets

Typescript 有条件地使属性可选

graphql - <ReferenceArrayInput/> 无法与我的自定义数据提供程序 (prisma) 配合使用

graphql - 如何在 prisma 订阅中返回自定义数据

javascript - Angular 模块没有导出成员 'fromEvent'

javascript - 追加表单数据对象?

typescript - 覆盖属性并调用基础版本

javascript - Apollo 客户端 useMutation 数据总是返回 undefined

javascript - 如何使用 bootstrap carousel 最大化或填充整个页面。 (带导航栏)