ค้นหาเว็บไซต์

javascript - เวอร์ชันล่าสุดที่อัปเดตของ `@types/node` กำลังสร้างข้อผิดพลาด เวอร์ชันก่อนหน้านี้ทำงานได้ดี


ฉันได้รับข้อผิดพลาดนี้

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 ได้ถูกลบออกและเปลี่ยนมาใช้ globalThis แทน

คุณสามารถประกาศตัวแปรทั่วโลกใหม่ในไฟล์โมดูลได้ดังนี้:

declare global {
  var NEW_GLOBAL: string;
}

และในไฟล์ที่ไม่ใช่โมดูล (ไม่มีการ import/export ระดับบนสุด) ดังนี้:

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;

บทความที่เกี่ยวข้อง