node.js - Rozšíření pro globální rozsah mohou být přímo vnořena pouze v externích modulech nebo deklaracích ambientních modulů (2669)
Chtěl bych uložit svou konfiguraci NodeJS do globálního rozsahu.
Snažil jsem se následovat toto => Rozšiřování globálního objektu TypeScript v node.js a další řešení na stackoverflow,
Vytvořil jsem soubor s názvem global.d.ts, kde mám následující kód
declare global {
namespace NodeJS {
interface Global {
config: MyConfigType
}
}
}
Rozšíření pro globální rozsah mohou být přímo vnořena pouze v externích modulech nebo deklaracích ambientních modulů.ts(2669)
ale dělat tohle funguje dobře =>
declare module NodeJS {
interface Global {
config: MyConfigType
}
}
Problém je, že potřebuji importovat soubor MyConfigType, abych mohl typizovat konfiguraci, ale druhá možnost to neumožňuje.
Odpověď č. 1
Můžete označit, že soubor je modul, takto:
export {};
declare global {
namespace NodeJS {
interface Global {
config: MyConfigType
}
}
}
Odpověď č. 2
Nebo pokud se pokoušíte přidat globální typ v kontextu prohlížeče:
export {};
declare global {
interface Window {
ENV: any;
}
}
Odpověď č. 3
Pokud váš .d.ts se spouští jako „skript“ (nemá žádné import/export příkazy), nebudete muset vůbec používat declare global a můžete ho jednoduše odstranit. „Skript“ se již spouští v globálním kontextu.
(mimochodem: toto je důvod, proč přidání export {} funguje, přemění to skript na modul a vaše deklarace v .d.ts už nejsou výchozě globální)
S příkladem, který upravuje console:
Před:
declare global {
interface Console {
log2: (...args: any[])=>void;
}
}
Po :
// This will be global!
interface Console {
log2: (...args: any[])=>void;
}
Díky @okcoker a https://stackoverflow.com/a/42257742/2759427 za vysvětlení kontextů .d.ts
