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

Posted

技术标签:

【中文标题】`@types/node` 的最新更新版本正在创建一个错误。以前的版本运行良好【英文标题】:Recent updated version of `@types/node` is creating an error. The previous version was working fine 【发布时间】:2021-09-20 03:45:56 【问题描述】:

我收到了这个错误

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", 的标准方法是什么?

【问题讨论】:

【参考方案1】:

node@16 开始,NodeJS.Global 接口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;

【讨论】:

一定要看粗体字,我没看,输了大概3个小时?

以上是关于`@types/node` 的最新更新版本正在创建一个错误。以前的版本运行良好的主要内容,如果未能解决你的问题,请参考以下文章

如何排除`node_modules/@types/**/node_modules`?

TS2688:找不到安装了 @types/node 的“节点”的类型定义文件

如何为不在@types 中的类型配置 tsconfig.json?

我在使用 tsc 构建时遇到此错误

在tsconfig中禁用@ types / node

即使安装了@types/node,Typescript 也找不到模块“fs”