2016-09-30 10 views
1

要するに、作成するタイプ(ファクトリオブジェクトの一種)を格納するクラスを作成したいと考えています。以下のサンプルクラスのセットに取り付けられた私の問題の一例です: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()); 

私は、形状タイプが、私はインスタンス化されますクラスを表現したいが、私は形から派生何かすることを制限したいです。もちろん、私はシェイプを新しくすることはできませんが、シェイプからを派生してを派生させますが、実際にはになります。シェイプ抽象シェイプクラスです。

これは具体的なクラスであることを説明するために型ガードを使用することが可能かどうかはわかりません。おそらく私はまったく考慮していないこの周りに別の方法があります。私の現在可能な解決策は、createShapeの戻り値の型をanyに変更するか、createShapeの代わりになるコンストラクタパラメータとして関数を必要とすることだけです。

答えて

2

は、そのような単純なああ、

shapeType: { new(): Shape; }; 
+0

をお試しください!これは、shapeTypeのコンストラクタがShapeオブジェクトを返すことを保証します。ありがとう! –

関連する問題