在NodeJS中声明全局变量



我目前正在使用这个结构来使全局LOG可用:

declare global {
let LOG: Logger;
}
// eslint-disable-next-line @typescript-eslint/no-namespace
declare namespace globalThis {
let LOG: Logger;
}
globalThis.LOG = new Logger();

是的,它可以工作,但是我需要声明它两次。为什么?

附加问题:如何变得更聪明?

因为全局命名空间的接口和globalThis的接口不一样;后者是前者的一个子集。(通过全局作用域letconstclass,您可以拥有不属于全局对象的全局变量。)它们在TypeScript中有明确的定义。如果这些都是在同一时间完成的,那么全局命名空间可能会使用与globalThis接口的交集,但是globalThis只是最近才定义的(并且/或者可能有其他原因不能这样做)。

实际上,解决方案是将let变为var:

declare global {
// eslint-disable-next-line no-var
var LOG: Logger;
}
global.LOG = new Logger();

最新更新