我尝试使用符号作为返回类型,因此派生类需要调用父类,以便获得只有父类知道的原始Symbol()
export type Ctx = CanvasRenderingContext2D;
export type GameContext = { [x : string] : unknown };
export interface IEntity {
x : number;
y : number;
death : boolean;
}
abstract class Entity implements IEntity {
x: number;
y: number;
death : boolean = false;
private readonly secret : symbol;
constructor( x : number, y : number) {
this.x = x;
this.y = y;
this.secret = Symbol();
}
destructor() : Entity['secret'] {
return this.secret
}
}
class SubEntity extends Entity {
constructor() {
super(Math.floor(Math.random() * 100), Math.floor(Math.random() * 100));
}
destructor() {
return Symbol();
//return super.destructor();
}
}
我一直试图做的是强制派生类调用父析构函数以获取secret
返回值,当它允许派生类返回任何Symbol()
而不仅仅是Entity
构造函数中生成的值时,问题就出现了
我知道有一个类似的问题here链接到github上关于新关键词的讨论,但是我使用的近似是不同的。
edit:我忘了提一下这个问题指的是类中所有类型的函数,而不仅仅是destructor
,因为destructor
函数只是JS(和TS)的常规函数,并不像C++中那样有特殊的含义。
1条答案
按热度按时间ebdffaop1#
这里有一种方法可以实现我所寻找的相同结果,但使用
Anonymous Class
作为父destructor
的返回类型,而不是Symbol()
。我坚信这是实现在子类
destructor
中强制调用super.destructor
的最佳方式。