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

通过原型定义getter触发@typescript-eslint/unbound-method报错问题

问题诊断

你的getter实现逻辑没有问题,报错来源于类型声明与实际实现不匹配:
你在模块扩展的接口中将property声明为了函数类型property(): number,TS 会默认该字段是需要调用的类方法。当你直接访问instance.property而没有加调用括号时,@typescript-eslint/unbound-method规则会判定你是把类方法直接提取出来、未绑定实例this,因此抛出错误。但你实际是通过Object.defineProperty把property定义为了访问器getter,本质是读取属性而非调用方法,所以类型声明不符合实际运行逻辑。

修复方案
  • 修改接口中property的类型声明,将函数签名改为普通属性类型即可:
declare module "../module" {
    interface Module {
      method(): void;
      // 改为普通number类型,不要写()函数签名,TS会自动识别为可直接读取的属性
      property: number;
    }
}
  • 你当前的getter实现逻辑完全正确,无需修改。如果有需要可以按需给Object.defineProperty补充enumerable: true等配置,默认配置也能正常运行。
效果验证

修复后再执行const variable = instance.property时,TS会正确识别variable的类型为number,不会再触发unbound-method的eslint报错,运行逻辑也和之前完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:21:03