Ich versuche, eine generische Basisklasse für ein Protractor-Seitenobjekt zu schreiben. Dies ist eine reflexiv generische Klasse mit einer init-Methode, die sich selbst zurückgibt, nachdem sie auf angular gewartet oder nicht gewartet hat, abhängig davon, ob das Objekt eckig ist oder nicht. Ich möchte, dass die init-Methode den richtigen Typ zurückgibt - die Klasse, die die Basisklasse erweitert, aber ich bekomme einen Kompilierfehler, der sich darüber beschwert, dass ich 'this' nicht zurückgeben kann, weil es keine Instanz des generischen Parameters ist.Wie Reflexive generische Klasse in Typescript zu tun?
export abstract class AbstractLoadable<T extends AbstractLoadable<T>> {
protected isAngularComponent: boolean;
public constructor(isAngularComponent: boolean = true) {
this.isAngularComponent = isAngularComponent;
}
public initComponent(): T {
browser.waitForAngularEnabled(this.isAngularComponent);
if(this.isAngularComponent) {
browser.waitForAngular();
}
return this as T; // Error here.
}
}
Der Fehler ist: Typ 'this
' kann nicht auf den Typ 'T
' umgewandelt werden. Typ 'AbstractLoadable<T>
' ist nicht vergleichbar mit Typ 'T
'.
Dieses Muster funktioniert in Java und ich bin neu in JavaScript und Typoskript. Kann man das in Typoskript abziehen?