javascript - Den nylig oppdaterte versjonen av `@types/node` skaper en feil. Den forrige versjonen fungerte fint


Jeg får denne feilen

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

Mens du kjører dette

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;

DET ER PROBLEMET MED @types/node-VERSJONEN.
--> Med "@types/node": "^15.4.0" (jeg husker ikke nøyaktig, men det startet fra 15 (15.x.x))
--> Feilen vises etter oppdatering til den nyeste versjonen "@types/node": "^16.3.0"

Hva er den standardmåten å få det til å fungere med den nyeste versjonen "@types/node": "^16.3.0", ?

Svar #1

Fra og med node@16 har NodeJS.Global-grensesnittet blitt fjernet til fordel for globalThis.

Du kan erklære en ny global variabel i en modulfil som:

declare global {
  var NEW_GLOBAL: string;
}

Og i en ikke-modulfil (ingen top-nivå import/eksport) som:

declare var NEW_GLOBAL: string;

Viktig merknad: variabel må deklareres som var. let eller const variabler vises ikke på globalThis.

Så, koden din kan omskrives som:

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;

Relaterte artikler