在用 TS 进行 electron 开发时,我需要在 main 端将一些方法数据挂在在 global 对象上。比如我需要将 windows 对象挂在到 global 上,但是一写则报 TS2339 这个错误:
Property 'windows' does not exist on type 'Global'.
网上找了很多办法,比如定义全局 type 文件等等,最后的结局方法如下。
最终解决方法
// windows.ts
// import ....
declare global {
namespace NodeJS {
interface Global {
windows: Electron.BrowserWindow;
}
}
}
// ...业务代码
global.windows = window
// ...业务代码
解决方案原理
在官方的 handbook 中,有一段解释如下:
在TypeScript中,就像在ECMAScript 2015中一样,任何包含顶级
import或者export的文件都被视为模块(Modules)。相反,没有任何顶级导入或导出声明的文件被视为脚本,其内容在全局范围内可用(因此也可用于模块)。
直白的话就是,当有 import 或者 export 之后,所有的对象都是在这个模块中了,所以不能够采用 global.d.ts 的方法重新定义一个 typings 文件。所以如果需要修改 global 这个对象,必须在当前文件下 declare 出 global 对象然后在 NodeJS 的命名空间中扩展 Global 的字段。
参考
关注前端技术的小伙伴,欢迎点击扫描下面的二维码加入我建的 「前端开发交流群」,共同交流前沿前端技术。

我是空谷,独立产品经理、全栈设计师、全栈工程师。
技术栈为 React/Dva/Umi/Node/Egg/Electron
欢迎扫码加我微信交流,备注来源:优快云

本文讲述在用TS进行Electron开发时,将方法数据挂在global对象上报TS2339错误的解决办法。介绍了最终解决方法及原理,指出在TypeScript中,有导入或导出声明的文件为模块,修改global对象需在当前文件扩展Global字段。
1725

被折叠的 条评论
为什么被折叠?



