Вкратце, я хочу создать класс, в котором хранится тип, который он будет создавать (вид фабричного объекта). Ниже приведен пример моей проблемы установки на набор классов образцов:В TypeScript я могу создать экземпляр из свойства, определенного как класс (не экземпляр), полученный из абстрактного класса?
abstract class Shape {
size: number;
abstract getArea(): number;
}
class Square extends Shape {
getArea(): number { return this.size * this.size; }
}
class ShapeGenerator {
shapeType: typeof Shape;
createShape(): Shape { return new this.shapeType() } // Here's the problem!
}
var squareGenerator = new ShapeGenerator();
squareGenerator.shapeType = Square;
var mySquare = squareGenerator.createShape();
mySquare.size = 5;
console.log(mySquare.getArea());
Я хочу shapeType представлять класс, который я буду создание экземпляра, но я хочу, чтобы ограничить это, чтобы быть чем-то производным от Shape. Конечно, я не могу создать новую форму, но я не могу понять, как написать, что shapeType будет , полученным от Shape, но на самом деле не будет be абстрактный класс формы.
Я не уверен, можно ли использовать охранник типа, чтобы объяснить, что это будет конкретный класс. Возможно, есть еще один способ, который я не рассматривал вообще. Мои текущие возможные решения - просто изменить тип возврата createShape на любой или потребовать функцию в качестве параметра конструктора, который заменил бы createShape.
Ах, просто! Это просто гарантирует, что конструктор shapeType возвращает объект Shape, именно то, что мне нужно. Благодаря! –