我目前正在使用这个结构来使全局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
的接口不一样;后者是前者的一个子集。(通过全局作用域let
、const
和class
,您可以拥有不属于全局对象的全局变量。)它们在TypeScript中有明确的定义。如果这些都是在同一时间完成的,那么全局命名空间可能会使用与globalThis
接口的交集,但是globalThis
只是最近才定义的(并且/或者可能有其他原因不能这样做)。
实际上,解决方案是将let
变为var
:
declare global {
// eslint-disable-next-line no-var
var LOG: Logger;
}
global.LOG = new Logger();