简而言之,我想创建一个类来存储它将创建的类型(一种工厂对象)。下面是一个适用于一组示例类的问题示例:
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派生的东西。当然我不能新建一个Shape,但我无法弄清楚如何写出shapeType将从派生来自Shape,但实际上不会 抽象的Shape类。
我不确定是否可以使用类型防护来解释这将是一个具体的类。也许还有另一种解决方法,我根本没有考虑过。我目前可能的解决方案是将createShape的返回类型更改为any,或者需要一个函数作为构造函数参数来取代createShape。
答案 0 :(得分:2)
尝试
shapeType: { new(): Shape; };