我使用ipcMain
从Svelte进行API调用。通常,我会这样做:
const get_version = async () => {
version = await window.api.GetVersion();
}
字符串
它是这样处理的:
//preload.ts
const WINDOW_API = {
GetVersion: () => ipcRenderer.invoke("get/version")
}
contextBridge.exposeInMainWorld("api", WINDOW_API);
//main.ts
ipcMain.handleOnce("get/version", () => app.getVersion());
虽然这段代码运行良好,但Typescript给出了以下错误:
属性“API”在类型“Window & typeof globalThis”上不存在. ts(2339)
这个错误出现在.svelte
文件中。我试图通过在我的global.d.ts
文件中创建一个接口来解决这个问题,如下所示:
//global.d.ts
interface Window {
api: any; //attempt 1
api: { GetVersion: () => Promise<string>; } //attempt 2
}
型
但是两次尝试都失败了,错误仍然存在。我知道我可以使用像(window as any)
这样的东西来抑制这个错误,但是随着我的API调用的增长,我相信类型检查会很有帮助,所以我想尝试解决这个问题。
我该怎么解决这个问题?
注1:我相当确定我已经为Svelte文件正确设置了Typescript类型检查,因为我已经使用了自定义类型。
1条答案
按热度按时间vxf3dgd41#
原来我不得不把接口移到全局声明中,这样Svelte才能接收到它。在修改了我的全局声明类型脚本后,问题就解决了。
字符串
然而,奇怪的类型仍然存在。通常情况下,
window
应该是Window
类型,但它是Window & typeof globalThis
。我仍然没有弄清楚为什么会这样,我很有兴趣了解到底是什么导致了这一点。