TS2611:“foo”被定义为类“A”中的属性,但在“B”中作为访问器被覆盖

2024-04-20

我在 Angular 应用程序中遇到 Typescript 编译错误。以下是示例代码和错误消息。

请您指导我抑制这个错误。我认为根据 Javascript 这段代码是正确的。

- error TS2611: 'foo' is defined as a property in class 'A', but is overridden here in 'B' as an accessor.
export class A {
  foo: string;
}

export class B extends A {
  f1;
  set foo(name) {
    this.f1 = name;
  }
  get foo() {
    return this.f1;
  }
}

编者注:在评论中发现这两个类A and B在第三方库中。


错误消息是正确的,因为这里有一个微妙的错误。当您在父类中定义属性时,该属性就会被创建自动地对于它的每一个子类。

那么,在您编写的代码中,您是否not为B类编写:set/get foo(name) { ... }班级本来会有foo财产anyway由于该财产是在B的父类 -A.

在你的代码中你实际上是在破坏foo声明的财产A与访问器声明。

如果你想要求所有子类A来声明他们的own foo属性(类似于接口),然后尝试:

export class A {
  abstract foo: string;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TS2611:“foo”被定义为类“A”中的属性,但在“B”中作为访问器被覆盖 的相关文章

随机推荐