(打字稿)属性"窗口"在类型"全局"上不存在



我正在使用摩卡/柴来进行单位测试,并嘲笑window如下:

global.window = { innerHeight: 1000, innerWidth: 1000 };

可以理解的是,tslint抱怨:

属性'窗口'在类型'global'

上不存在

一些问题... Global是否内置nodejs/tyspript类型?我目前正在用文件顶部用declare var global的警告沉默……但是这是处理此问题的最佳方法吗?我注意到我也可以通过以下警告解决:

declare global {
    namespace NodeJS {
        interface  Global {
            window: any;
        }
    }
}

最好是,我想扩展现有的Global类型,以接受window属性。谢谢。

Global是内置的nodejs/tyspript类型?

是。参见@types/node/index.d.ts;在该文件中,他们声明了一个NodeJS名称空间,在此中,Global接口(就像您完成的一样)。

我目前正在用declare var global

沉默警告

听起来您没有安装节点打字(这些打字包括行declare var global: NodeJS.Global;,因此您不必自己做任何此类声明)。运行:

npm install --save-dev @types/node

或,如果您使用yarn

yarn add -D @types/node

最好是,我想扩展现有的Global类型以接受window属性。

您主要在那里。只需用window: Window;替换window: any;即可。注意:您将需要tsconfig.jsonlib部分才能包括dom来提供Window接口。

您可能很快就会发现您也想增强全局documentnavigator(同样,这两个都是在dom LIB中定义的,因此需要它):

interface Global {
    document: Document;
    window: Window;
    navigator: Navigator;
}

最新更新