typescript 使用符号强制调用超级析构函数

u3r8eeie  于 2023-02-20  发布在  TypeScript
关注(0)|答案(1)|浏览(211)

我尝试使用符号作为返回类型,因此派生类需要调用父类,以便获得只有父类知道的原始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++中那样有特殊的含义。

ebdffaop

ebdffaop1#

这里有一种方法可以实现我所寻找的相同结果,但使用Anonymous Class作为父destructor的返回类型,而不是Symbol()
我坚信这是实现在子类destructor中强制调用super.destructor的最佳方式。

相关问题