You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中调用Eel暴露的Python函数?JS可正常运行

解决TypeScript调用Eel暴露Python函数的编译报错

核心问题

TypeScript是强类型语言,编译阶段无法识别Eel在运行时注入到全局的eel对象及其中的Python暴露函数——这就是报错的根源,而纯JS不做静态类型检查,所以能正常运行。

具体解决方案

1. 添加全局类型声明

创建一个eel.d.ts类型声明文件(放在项目根目录或源码目录下),让TypeScript识别eel对象:

简易版(快速解决)

declare global {
  interface Window {
    eel: any;
  }
}

export {};

精准版(推荐,获得类型提示)

如果清楚暴露的Python函数签名,可以更精确地声明,避免调用时传参错误:

declare global {
  // 定义你暴露的Python函数类型
  interface EelExposedFunctions {
    // 示例:假设暴露了一个接收字符串、返回Promise的问候函数
    greet(name: string): Promise<string>;
    // 按需添加其他函数,比如计算求和
    calculate_sum(a: number, b: number): Promise<number>;
  }

  interface Window {
    eel: EelExposedFunctions;
  }
}

export {};

2. TypeScript中调用函数的方式

和JS逻辑完全一致,现在TypeScript不会再报错:

// 调用示例:问候函数
window.eel.greet("Rafael")
  .then((response) => {
    console.log(response);
  })
  .catch((err) => {
    console.error("调用失败:", err);
  });

// 调用示例:求和函数
window.eel.calculate_sum(5, 3)
  .then((total) => {
    console.log("总和:", total);
  });

3. 确保TypeScript配置包含类型文件

检查tsconfig.json的include字段,确保它覆盖了你的eel.d.ts文件:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "ESNext",
    "outDir": "./dist",
    "strict": true
  },
  "include": ["src/**/*", "./eel.d.ts"]
}

原理补充

Eel在页面加载完成后,会自动把Python端暴露的函数挂载到全局window.eel对象上。JS是动态类型语言,运行时能直接访问这个对象;但TypeScript在编译阶段做静态类型检查,默认不知道这个全局对象的存在,所以必须通过类型声明告知编译器对象的结构。

内容的提问来源于stack exchange,提问作者Rafael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:15:32