Абстрактное свойство в классе недоступно в конструкторе - PullRequest
0 голосов
/ 20 января 2019

В следующем примере я получаю ошибку 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 голосов
/ 27 июня 2019

Это немного уродливо для строки, но вы могли бы сделать:

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();
    }
}
...