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

如何扩展NPM包声明的全局window.ethereum类型新增自定义属性?

解决方法

可以通过扩展WalletLinkProvider类型实现需求,按以下步骤操作即可解决类型冲突问题:

步骤1:新建自定义类型声明文件

在项目src目录下新建global.d.ts文件,确保你的tsconfig.json的include配置包含该文件,示例配置参考:

{
  "include": ["src/**/*", "src/global.d.ts"]
}

步骤2:编写正确的模块扩充代码

在global.d.ts中写入以下内容:

// 必须导入原模块的类型,TS才会识别为模块扩充而非覆盖原有声明
import { WalletLinkProvider } from "walletlink";

declare module "walletlink" {
  // 新增的接口会和原类对应的实例类型自动合并
  interface WalletLinkProvider {
    autoRefreshOnNetworkChange: boolean;
  }
}

可选临时解决方法

如果不想全局扩充类型,可直接在赋值时用类型断言绕开校验:

(window.ethereum as import("walletlink").WalletLinkProvider & { autoRefreshOnNetworkChange: boolean }).autoRefreshOnNetworkChange = false;

原写法失效原因说明

  • 前两种模块扩充写法未导入原WalletLinkProvider类型,TS会把你的声明当做全新的类型定义,而非和原有类型合并,反而触发属性不存在的报错。
  • 直接修改window.ethereum为any不符合TS接口合并规则:同一接口的同名属性类型必须兼容,any和原有定义的WalletLinkProvider | undefined不兼容,因此触发类型冲突错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:07