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
