Javascript ESLint或Flow-Force对变量的引用必须以存在性检查作为前缀

Javascript ESLint或Flow-Force对变量的引用必须以存在性检查作为前缀,javascript,eslint,flowtype,Javascript,Eslint,Flowtype,有没有办法强制对变量的所有引用都以检查其存在性为前缀 我们最近为我们的一个应用程序添加了服务器端渲染,并且在服务器端渲染组件中出现了一些引用window的事件,其中未定义window 是否有一种方法可以让每次有人引用窗口时,都以typeof window!='未定义“ 比如说 const isEligible = () => window && window.screen && window.screen.availHeight >

有没有办法强制对变量的所有引用都以检查其存在性为前缀

我们最近为我们的一个应用程序添加了服务器端渲染,并且在服务器端渲染组件中出现了一些引用
window
的事件,其中未定义
window

是否有一种方法可以让每次有人引用窗口时,都以
typeof window!='未定义“

比如说

const isEligible = () =>
   window &&
   window.screen &&
   window.screen.availHeight > 200;
应该是eslint或flow错误,表示应该检查
typeof window!='在第一个窗口引用之前未定义“

请注意,我已经知道eslint的
no undef
。但是,这不起作用,因为窗口将为绝大多数引用定义,只有在特定组件的渲染函数中使用窗口时,才应该对其进行标记

流的声明
窗口
为类型
任何
。您可以重写该声明,使其具有类型
?any
,从而强制执行空值检查。您可以在需要这些保护的每个文件中执行此操作,也可以在项目范围内执行此操作,方法是将其放入
.flowconfig
部分中包含的文件中

declare var window: ?any;

window.foo; // expected error

if (window) {
  window.foo; // no error
}

希望有人能够提供特定于流的答案,但在typescript中,您可以将
窗口
添加到全局声明文件中,并将其表示为对象和
未定义