【问题标题】:Property does not exist on type Window & typeof globalThis属性在类型 Window 和 typeof globalThis 上不存在
【发布时间】:2021-05-13 04:10:24
【问题描述】:

在 Electron-React-Typescript 应用程序中,我收到此错误:Property 'api' does not exist on type 'Window & typeof globalThis'. window.api.send('open-type-A-window', '');

但是在 index.d.ts 文件中,我以这种方式声明了接口 Window:

declare global {
  namespace NodeJS {
    declare interface Window {
      "electron": {
          openNewWindow(): void;
      },
      "api": {
          send: (channel, data) => {
              ipcRenderer.invoke(channel, data).catch(e => console.log(e))
          },
          receive: (channel, func) => {
            console.log("preload-receive called. args: ");
            ipcRenderer.on(channel, (event, ...args) => func(...args));
          },
          electronIpcSendTo: (window_id: string, channel: string, ...arg: any) => {
            ipcRenderer.sendTo(window_id, channel, arg);
          },
          electronIpcSend: (channel: string, ...arg: any) => {
            ipcRenderer.send(channel, arg);
          },
          electronIpcSendSync: (channel: string, ...arg: any) => {
            return ipcRenderer.sendSync(channel, arg);
          },
          electronIpcOn: (channel: string, listener: (event: any, ...arg: any) => void) => {
            ipcRenderer.on(channel, listener);
          },
          electronIpcOnce: (channel: string, listener: (event: any, ...arg: any) => void) =>
 {
            ipcRenderer.once(channel, listener);
          },
          electronIpcRemoveListener:  (channel: string, listener: (event: any, ...arg: any) 
=> void) => {
            ipcRenderer.removeListener(channel, listener);
          },
          electronIpcRemoveAllListeners: (channel: string) => {
            ipcRenderer.removeAllListeners(channel);
          }
      }
    }
  }
}

我已经阅读了这个帖子:https://github.com/Microsoft/TypeScript/issues/19816,但我没有得到正确的解决方案。

为了避免这个错误Property 'api' does not exist on type 'Window & typeof globalThis',我应该添加/修改什么?

  • 节点:v14.5.0
  • 电子:v11.2.3
  • 打字稿:v4.1.3
  • 操作系统:Ubuntu 18.04.4 桌面

【问题讨论】:

  • "api", { 好像打错了
  • @p4m 谢谢。不幸的是,即使在纠正了这个错字之后,我也得到了Property 'api' does not exist on type 'Window & typeof globalThis'

标签: reactjs typescript electron


【解决方案1】:

我不熟悉 React.js,但我在使用 Electron-Angular 应用程序时遇到了同样的问题。通过将以下声明添加到我的 app.module.ts 文件中,它允许 TypeScript 识别窗口中的 api 对象。

您应该能够通过添加到您的 TS 项目中的主模块来做同样的事情。

declare global {
  interface Window {
    api?: any;
  }
}

在您应该能够在项目中的任何位置简单地执行代码之后。

if(window.api) {
  window.api.send('ipcChannel', data);
}

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2022-06-14
    • 2022-08-05
    • 2022-01-04
    • 2020-12-23
    • 2021-04-09
    • 2021-12-07
    • 2021-09-20
    • 2021-01-09
    相关资源
    最近更新 更多