【发布时间】:2019-09-02 16:42:30
【问题描述】:
下面代码中的抽象类ParentClass需要使用抽象属性significantEntity(这是类上的实例,继承自抽象SignificantEntityParent)。当然,下面的代码是无效的,因为significantEntity 实现的类型与SignificantEntityParent 不同。
abstract class SignificantEntityParent {}
class SignificantEntity1 extends SignificantEntityParent {}
class SignificantEntity2 extends SignificantEntityParent {}
abstract class ParentClass {
protected abstract significantEntity: SignificantEntityParent;
public testMethod(): void {
console.log(this.significantEntity);
}
}
class TestClass1 extends ParentClass {
constructor() {
super();
// invalid!
this.significantEntity = new SignificantEntity1();
}
}
class TestClass2 extends ParentClass {
constructor() {
super();
// invalid!
this.significantEntity = new SignificantEntity2();
}
}
我尝试过使用抽象泛型方法getSignificantEntity<SignificantEntity extends SignificantEntityParent>(): SignificantEntity。
abstract class ParentClassA {
protected abstract getSignificantEntity<SignificantEntity extends SignificantEntityParent>(): SignificantEntity;
public logSignificantEntity(): void {
console.log(this.getSignificantEntity());
}
}
class TestClassA1 extends ParentClassA {
private significantEntity: SignificantEntity1;
constructor() {
super();
this.significantEntity = new SignificantEntity1();
}
protected getSignificantEntity(): SignificantEntity1 {
return this.significantEntity;
}
}
class TestClassA2 extends ParentClassA {
private significantEntity: SignificantEntity2;
constructor() {
super();
this.significantEntity = new SignificantEntity2();
}
protected getSignificantEntity(): SignificantEntity2 {
return this.significantEntity;
}
}
我收到很多错误:
- TS2416:“TestClassA”类型中的属性“getSignificantEntity”不能分配给基类型“ParentClassA”中的相同属性。
- 类型 '() => SignifcantEntity1' 不可分配给类型 'SignificantEntity extends SignificantEntityParent>() => SignificantEntity'。
- 类型“SignificantEntity1”不可分配给类型“重要实体”。
我无法理解 TypeScript 试图告诉我什么。在抽象类中使用significantEntity 是否有有效的方法?
【问题讨论】: