TypeScript 建议:允许环境属性声明覆盖访问器 ```markdown 建议:允许环境属性声明覆盖访问器 ```

2g32fytz  于 5个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(59)

当前,这个模式会产生错误,但可以认为不应该:

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 是一个属性,而不是一个访问器。

blpfk2vs

blpfk2vs1#

基于这里的评论:#37894 (评论)
@DanielRosenwasser @rbuckton 我们应该讨论这个问题。
相关:一个提议,将错误放在 strict 下方:#39401。这个问题表明,也许这个错误豁免应该适用于装饰属性和环境属性。

bxgwgixi

bxgwgixi2#

我刚刚在stackoverflow上打开了一个与此相关的question。TL;DR是:
我有一个带有原型中访问器(getter)的基本类,我想让派生类在其示例中初始化自己的属性,覆盖访问器。基本上像这样(使用useDefineForClassFields: true):

class Base {
    get foo() { return "getter"; }
}

class Deriv extends Base {
    readonly foo: string = 'own property';
}

TS因错误TS2610而失败。我明白即使我在Base中有setter,它也不会被Deriv的构造函数调用,这正是我所需要的。Base可以为foo提供一个不需要的默认算法,而后者只需在每个示例中使用普通的(可枚举的)数据属性即可。
这个情况是否与这个问题有关,还是应该另开一个?

ssgvzors

ssgvzors3#

希望这个能被实现。

相关问题