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

如何在TypeScript泛型方法签名中使用getter属性的key类型

报错原因
  • 本质是TypeScript对类内多态this的推断限制:定义K extends keyof this['config']时,这里的this是可随子类继承变化的多态类型,但基类内部直接读取this.config时,TS会默认将其收敛为基类当前定义的固定config类型{ foo: string },类型系统无法确认泛型K(可能包含子类新增的key)一定可以索引基类的固定config类型,因此抛出索引错误。
解决方案

无需额外定义泛型接口或给类加泛型参数,仅需在基类access方法中给this.config显式断言为多态的this['config']类型即可,修改后代码如下:

class Parent {
  public get config() {
    return {
      foo: 'lorem',
    };
  }

  public access<K extends keyof this['config']>(key: K): this['config'][K] {
    // 断言告知TS this.config遵循多态this的config定义,而非基类固定类型
    return (this.config as this['config'])[key];
  }
}

class Child extends Parent {
  public override get config() {
    return {
      foo: 'lorem',
      bar: 'ipsum',
    };
  }
}

new Parent().access('foo'); // 类型正常,返回string
new Child().access('bar'); // 类型正常,返回string
  • 该改动完全符合简化需求:所有类型定义都在类内部完成,子类重写config后access方法的入参、返回值类型会自动适配新的config结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:27:03