(Typescript)'Global'类型中不存在属性'window'

sir*_*day 7 javascript node.js typescript

我正在使用Mocha/Chai进行单元测试并且嘲笑window如下:

global.window = { innerHeight: 1000, innerWidth: 1000 };
Run Code Online (Sandbox Code Playgroud)

可以理解的是,TSLint抱怨说:

"全球"类型中不存在属性"窗口"

一些问题......是Global内置的NodeJS/Typescript类型?我目前正在使用declare var global文件顶部的警告进行静音...但这是处理此问题的最佳方法吗?我注意到我也可以通过以下方式解决警告:

declare global {
    namespace NodeJS {
        interface  Global {
            window: any;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望扩展现有Global类型以接受window属性.谢谢.

Jam*_*rch 6

Global内置的 NodeJS/Typescript 类型吗?

是的。见@types/node/index.d.ts;在该文件中,它们声明了一个NodeJS命名空间,并在其中声明了一个Global接口(就像您所做的那样)。

我目前正在静音警告 declare var global

听起来您没有安装 Node 类型(这些类型包括该行,declare var global: NodeJS.Global;因此您不必自己进行任何此类声明)。跑:

npm install --save-dev @types/node
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用yarn

yarn add -D @types/node
Run Code Online (Sandbox Code Playgroud)

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

你大部分时间都在那里。只需替换window: any;window: Window;. 注意:您需要包含tsconfig.json'slib部分dom以提供Window接口。

您可能很快会发现您还想增加 Globaldocumentnavigator(同样,这两个都在domlib中定义,因此需要它):

interface Global {
    document: Document;
    window: Window;
    navigator: Navigator;
}
Run Code Online (Sandbox Code Playgroud)