无法在构造函数中访问类中的抽象属性

时间:2019-01-20 02:57:51

标签: typescript abstract-class

在下面的示例中,我收到TypeScript错误Abstract property 'name' in class 'Minigame' cannot be accessed in the constructor.

我正在努力思考如何实现这一目标。我无法将具体类的名称传递到super()调用中,因为在该调用之前我无法访问对象的属性,并且我也无法创建属性static,因为抽象类可以不必执行。

应如何组织这种结构以确保每个Minigame实例化一个Explanation对象,该对象需要具体的类的name属性?使名称static(并删除抽象要求)真的是使它保持简单的最佳选择吗?

abstract class Minigame {
    abstract name: string;
    explanation: Explanation;

    constructor() {
        this.explanation = new Explanation(this.name);
    }
}

class SomeGame extends Minigame {
    name = "Some Game's Name";

    constructor() {
        super();
    }
}

1 个答案:

答案 0 :(得分:1)

字符串有点难看,但是您可以这样做:

abstract class Minigame {
    abstract GetName(): string;
    explanation: Explanation;

    constructor() {
        this.explanation = new Explanation(this.GetName());
    }
}

class SomeGame extends Minigame {
    GetName(): string {
        return "Some Game's Name";
    }

    constructor() {
        super();
    }
}