`@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;
重要提示:变量必须声明为var
。 let
或 const
变量不会显示在 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 的“节点”的类型定义文件