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

TypeScript中抽象类的getter/setter操作静态属性不生效如何修复

问题原因

你当前定义的get data()和set data()属于类的实例存取器,仅当你通过new Builder()生成的实例对象访问.data属性时才会触发执行。而你直接通过类名Builder访问的是类的静态属性空间下的data,和实例存取器没有关联,因此不会触发对应的逻辑。

修复方案

把存取器也声明为静态的即可,同时需要修改原始静态存储字段的名称,避免和同名存取器产生递归调用冲突,修复后的代码如下:

export abstract class Builder {
  // 实际存储值的静态字段改名为私有字段,避免和存取器冲突
  private static _data: MyClass = {};

  // 声明静态存取器
  static get data(): MyClass {
    return Builder._data;
  }
  static set data(value: MyClass) {
    // 此处可添加你需要的自定义拦截逻辑
    Builder._data = value;
  }

  static member1() {}
  static member2() {}
  // ...其余成员保持不变
}

修改后你再通过Builder.data = {...}赋值或者读取Builder.data,就会正常触发对应的get/set逻辑。

如果你仍然需要保留实例层面的data存取能力,只需要把原来的实例存取器调整为操作_data即可:

get data(): MyClass {
  return Builder._data;
}
set data(value: MyClass) {
  Builder._data = value;
}

调整后无论是通过类直接访问,还是通过实例访问data,都会操作同一个存储值,且触发对应位置的存取器逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:36:06