【问题标题】:Recent updated version of `@types/node` is creating an error. The previous version was working fine`@types/node` 的最新更新版本正在创建一个错误。以前的版本运行良好
【发布时间】: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", 的标准方法是什么?

【问题讨论】:

    标签: javascript typescript prisma


    【解决方案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个小时?
    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2014-11-17
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多