我目前正在开发一个使用Electron 类星体设置的小应用程序.

我的Electron 预加载.ts如下所示:

import { contextBridge} from 'electron'
import alasql from 'alasql'

contextBridge.exposeInMainWorld('Electron', {
  importdata: () => importCsv()
})

export function importCsv () {
  console.log('we get here')
  return alasql.promise('SELECT * FROM CSV("/Users/niki/example_data.csv", {headers:true, seperators:","})')
    .then(function (data) {
      return data
    })

在我的MainLayout.vue中,我这样称呼它:

const firstimport = window.electronApi.importdata()

然后,我继续使用Promise进行一些进一步的操作,所有这些操作都会收到未定义错误的Cannot Read属性.我在vscode中也得到了错误,即.ElectronApi不存在.从字面上讲,同样的事情也适用于我的Electron 应用程序,它不是用quasar-cli创建的,所以我不确定我做错了什么.

我的窗口也是这样创建的,如果它相关的话:

function createWindow () {
  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    icon: path.resolve(__dirname, 'icons/icon.png'), // tray icon
    width: 1000,
    height: 600,
    useContentSize: true,
    webPreferences: {
      contextIsolation: true,
      sandbox: false,
      // More info: https://v2.quasar.dev/quasar-cli-vite/developing-electron-apps/electron-preload-script
      preload: path.resolve(__dirname, process.env.QUASAR_ELECTRON_PRELOAD)
    }
  })

  mainWindow.loadURL(process.env.APP_URL)

  if (process.env.DEBUGGING) {
    // if on DEV or Production with debug enabled
    mainWindow.webContents.openDevTools()
  } else {
    // we're on production; no access to devtools pls
    mainWindow.webContents.on('devtools-opened', () => {
      mainWindow?.webContents.closeDevTools()
    })
  }

  mainWindow.on('closed', () => {
    mainWindow = undefined
  })
}

推荐答案

好的,在整晚被它困扰并查看不同的项目和我使用的旧模板后,我发现了我的错误.首先,我在调用ElectronAPI时有一个拼写错误.其次,为了消除vscode中的语法错误,我需要以下文件:

我的src文件夹(渲染器文件夹)中的lobal.d.ts

import alasql from 'alasql'

/**
 * Should match main/preload.ts for typescript support in renderer
 */
export default interface electronAPI {
  sendMessage: (message: string) => void
  importdata: () => any
}

declare global {
  interface Window {
    electronAPI: ElectronAPI,
  }

}

Typescript相关问答推荐

交叉点对数字和布尔的处理方式不同

如何修复VueJS中的val类型不能赋给函数

即使子网是公共的,AWS CDK EventBridge ECS任务也无法分配公共IP地址

在Typescribe中,extends工作,但当指定派生给super时出错""

使某些类型的字段变为可选字段'

类型脚本泛型最初推断然后设置

使Typescribe强制所有对象具有相同的 struct ,从两个选项

如何正确地对类型脚本泛型进行限制

具有动态键的泛型类型

使用动态主体初始化变量

在包含泛型的类型脚本中引用递归类型A<;-&B

了解类型规则中的关键字

CDK从可选的Lambda角色属性承担角色/复合主体中没有非空断言

以Angular 自定义快捷菜单

对有效枚举值的常量字符串进行常规判断

字幕子集一个元组的多个元素

三重融合视角与正交阵

基于泛型的类型脚本修改类型

完全在类型系统中构建的东西意味着什么?

为什么 TypeScript 类型条件会影响其分支的结果?