当前,这个模式会产生错误,但可以认为不应该:
class B {
get p() { return B.s } // inferred p: {}
static get s() { return {} }
}
class C extends B {
declare readonly p: { x: 1 }
}
预期行为:
没有错误,并且 C.p: { x: 1 }
(但仍然是一个用于发射和检查的访问器)。也就是说,这应该是合法的:
class D extends C {
get p() { return { x: 1 } as const }
}
实际行为:
错误,并且 C.p
是一个属性,而不是一个访问器。
3条答案
按热度按时间blpfk2vs1#
基于这里的评论:#37894 (评论)
@DanielRosenwasser @rbuckton 我们应该讨论这个问题。
相关:一个提议,将错误放在
strict
下方:#39401。这个问题表明,也许这个错误豁免应该适用于装饰属性和环境属性。bxgwgixi2#
我刚刚在stackoverflow上打开了一个与此相关的question。TL;DR是:
我有一个带有原型中访问器(getter)的基本类,我想让派生类在其示例中初始化自己的属性,覆盖访问器。基本上像这样(使用
useDefineForClassFields: true
):TS因错误
TS2610
而失败。我明白即使我在Base
中有setter,它也不会被Deriv
的构造函数调用,这正是我所需要的。Base
可以为foo
提供一个不需要的默认算法,而后者只需在每个示例中使用普通的(可枚举的)数据属性即可。这个情况是否与这个问题有关,还是应该另开一个?
ssgvzors3#
希望这个能被实现。