2017-08-24 2 views
4

In meinem Typoskript ich versuche, ein Kind-Objekt über eine Methode in der Basisklasse zu erstellen/klonen. Dies ist mein (vereinfachtes) Setup. JetztAufruf Konstruktor von abgeleiteten Typ über diese in Typoskript

abstract class BaseClass<TCompositionProps> { 
    protected props: TCompositionProps; 

    protected cloneProps(): TCompositionProps { return $.extend(true, {}, this.props); } // can be overwriten by childs 

    constructor(props: TCompositionProps){ 
     this.props = props; 
    } 

    clone(){ 
     const props = this.cloneProps(); 
     return this.constructor(props); 
    } 
} 

interface IProps { 
    someValues: string[]; 
} 

class Child extends BaseClass<IProps>{ 
    constructor(props: IProps){ 
     super(props); 
    } 
} 

, ich werde ein neues Objekt

const o1 = new Child({someValues: ["This","is","a","test"]}; 

// get the clone 
const clone = o1.clone(); 

Der Konstruktor getroffen wird erstellen (aber es ist nur der Aufruf der Funktion), was bedeutet, es gibt kein neues Objekt erstellt. Bei der Verwendung von return Child.prototype.constructor(props) bekomme ich stattdessen mein neues Objekt.

Also wie kann ich den Konstruktor von Child in seiner Basisklasse aufrufen?

versuchte auch this

Antwort

5

Sie den Konstruktor mit dem neuen Operator aufrufen kann, die zu funktionieren scheint. Auch würde ich this für den Rückgabetyp verwenden, so dass die Klon-Methode des abgeleiteten Typen nicht den Basistyp

abstract class BaseClass<TCompositionProps> { 
    protected props: TCompositionProps; 

    protected cloneProps(): TCompositionProps { return $.extend(true, {}, this.props); } 

    constructor(props: TCompositionProps){ 
     this.props = props; 
    } 

    clone() : this{ 
     const props = this.cloneProps(); 
     return new (<any>this.constructor)(props); 
    } 
} 
+0

Nie wussten zurückkehren wird, dass ich 'this' als Return-Typ festlegen. Danke dafür und für die Lösung. Nach vielen Versuchen war ich etwas verwirrt, als ich die Klammern setzte und den "Konstruktor" statt "dieses" ausgab. – KingKerosin

Verwandte Themen