Los aumentos para el alcance global solo se pueden anidar directamente en módulos externos o declaraciones de módulos ambientales (2669)
Me gustaría almacenar mi configuración de NodeJS en el ámbito global.
Intenté seguir esto => Ampliar el objeto global TypeScript en node.js y otra solución en stackoverflow,
Hice un archivo llamado global.d.ts donde tengo el siguiente código
declare global {
namespace NodeJS {
interface Global {
config: MyConfigType
}
}
}
Los aumentos para el alcance global solo se pueden anidar directamente en módulos externos o declaraciones de módulos ambientales.ts(2669)
pero hacer esto funciona bien =>
declare module NodeJS {
interface Global {
config: MyConfigType
}
}
El problema es que necesito importar el archivo MyConfigType
para escribir la configuración, pero la segunda opción no lo permite.
Puedes indicar que el archivo es un módulo así:
export {};
declare global {
namespace NodeJS {
interface Global {
config: MyConfigType
}
}
}
O si estás intentando agregar un tipo global dentro del contexto del navegador:
export {};
declare global {
interface Window {
ENV: any;
}
}
Si se .d.ts
está ejecutando como un "script" (no tiene import/export
declaraciones), no será necesario hacerlo declare global
en absoluto y simplemente podrá eliminarlo. Ya se está ejecutando un "script" en el contexto global.
(aparte: esta es la razón por la que agregar export {}
funciona, lo convierte de un "script" en un "módulo" y sus declaraciones en ya .d.ts
no son globales de forma predeterminada)
Con un ejemplo modificando console
:
Antes:
declare global {
interface Console {
log2: (...args: any[])=>void;
}
}
Después:
// This will be global!
interface Console {
log2: (...args: any[])=>void;
}
Gracias a @okcoker y https://stackoverflow.com/a/42257742/2759427 por la explicación de los contextos .d.ts