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

如何仅在子类中重写getter方法?解决重写后setter报错问题

子类仅重写getter导致属性赋值报错的解决办法

当你在子类里只重写了基类属性的getter却没重写setter时,JS/TS会默认这个属性只有getter,直接屏蔽掉基类里的setter实现。这是因为子类的属性描述符会覆盖基类的,只定义getter的话,引擎就会认为该属性没有setter,赋值时自然就抛出Cannot set property x of #<MyClass> which has only a getter的错误。

你贴的那个setter写法看起来冗余,但确实是必要的——它明确告诉引擎这个属性依然拥有setter,并且把赋值逻辑委托给基类的实现。写法可以直接用你给出的:

set x(val: any) {
  super.x = val;
}

如果觉得这种重复写法不舒服,也可以把基类里的setter逻辑抽成一个独立方法(比如setX(val: any)),子类的setter直接调用这个方法,但本质上还是需要显式定义子类的setter来保留赋值能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:43:08