node.js - type 'typeof globalThis' har ingen indeksignatur


Jeg får denne feilen hver gang jeg prøver å legge til en funksjon i det globale Node.js-globalnavnerommet i et TypeScript-miljø.

Element har implisitt typen 'any' fordi typen 'typeof globalThis' ikke har noen indeksignatur

deklarerer det globale navnerommet

declare global {
  namespace NodeJS {
    interface Global {
      signin(): string[]
    }
  }
}

så hvis jeg prøver dette

global.signin = () => {}

det returnerer en

Elementet har implisitt typen 'any' fordi typen 'typeof globalThis' ikke har noen indeks-signatur

Svar #1

Jeg hadde et lignende problem, og jeg fant ut at Nodes globale typinger ble endret nylig; du kan nå overstyre dem ved å gjøre:

// global.d.ts
declare global {
    function someFunction(): string;
    var someVariable: string;
}

Merk: dette vil ikke fungere med let eller const, du må bruke var.

// index.ts
global.someFunction = () => "some value";
global.someVariable = "some value";

Svar #2

Nedenfor er et eksempel for Node v16

// globals.d.ts
declare module globalThis {
    var signin: () => string[];
}

Svar #3

Jeg hadde det samme problemet med en svelte.kit-app. Database-modulen min bruker en global variabel for å lagre dbClient som et løfte. VSCode sluttet å klage når global.d.ts-filen hadde dette innholdet.

import type { MongoClient } from 'mongodb'

declare global {
  namespace globalThis {
    var _mongoClientPromise: Promise<MongoClient>
  }
}

Svar #4

Du bør deklarere en global som er erklært som et grensesnitt i global.d.ts slik:

export interface global {}
declare global {
  var signin: ()=>string[]
}

VSCode gir riktige kodeforslag

Relaterte artikler