2016-09-11 9 views
1

BがAを拡張する場合、Aは新しいB?を作成するメソッドを定義します。ここでtypescriptのベースクラスに同じ型のインスタンスを作成する方法

class SetA { 
    constructor(public items:any[]) { 
    } 
    createNew(items){ 
     return new *typeof this*(items); //<-- insert actually working magic here 
    } 
    clone(){ 
     return this.createNew(this.items); 
    } 
} 
class SetB extends SetA { } 

var x = new SetB([1,2,3]); 
x.clone(); //<-- returns a new SetB 

答えて

4

あなたが行く:

type SetConstructor<T extends SetA> = { 
    new (items:any[]): T; 
} 

class SetA { 
    constructor(public items:any[]) {} 

    createNew(items): this { 
     return new (this.constructor as SetConstructor<this>)(items); 
    } 

    clone(){ 
     return this.createNew(this.items); 
    } 
} 

code in playground

createNewメソッドの戻り値の型がPolymorphic this typesあるthisです。

+0

パーフェクトは、あなたに感謝します – Flion

関連する問題