node.js - Utvidelser for det globale omfanget kan kun plasseres direkte i eksterne moduler eller deklarasjoner av ambient moduler(2669)


Jeg vil lagre NodeJS-konfigurasjonen min i det globale omfanget.

Jeg prøvde å følge dette => Utvide TypeScript Global-objektet i node.js og andre løsninger på StackOverflow,

Jeg laget en fil kalt global.d.ts der jeg har følgende kode

declare global {
    namespace NodeJS {
      interface Global {
          config: MyConfigType
      }
    }
  }

Utvidelser for det globale området kan kun plasseres direkte i eksterne moduler eller ambient moduldeklarasjoner.ts(2669)

men det å gjøre dette fungerer fint =>

declare module NodeJS  {
    interface Global {
        config: MyConfigType
    }
}

Problemet er at jeg må importere filen MyConfigType for å typisere konfigurasjonen, men det andre alternativet tillater ikke det.

Svar #1

Du kan angi at filen er en modul på denne måten:

export {};

declare global {
    namespace NodeJS {
        interface Global {
            config: MyConfigType
        }
    }
}

Svar #2

Eller hvis du prøver å legge til en global type i nettleserkonteksten:

export {};

declare global {
  interface Window {
    ENV: any;
  }
}

Svar #3

Hvis din .d.ts kjører som et «script» (det har ingen import/export-setninger), trenger du ikke å declare global i det hele tatt, og kan enkelt fjerne det. Et «script» kjører allerede i den globale konteksten.

(forresten: dette er grunnen til at det å legge til export {} fungerer, det gjør at det går fra å være et «script» til å bli et «module», og deklarasjonene dine i .d.ts er ikke lenger globale som standard)

Med et eksempel som endrer console:

Før :

declare global {
  interface Console {
    log2: (...args: any[])=>void;
  }
}

Etter :

// This will be global!
interface Console {
  log2: (...args: any[])=>void;
}

Takk til @okcoker og https://stackoverflow.com/a/42257742/2759427 for forklaringen av .d.ts-kontekster

Relaterte artikler