如何在Typescript中创建自反泛型类?

如何在Typescript中创建自反泛型类?,typescript,generics,Typescript,Generics,我正在尝试为一个量角器页面对象编写一个通用基类。它是一个具有init方法的反射泛型类,在等待或不等待angular后返回自身,具体取决于对象是否为angular。我希望init方法返回正确的类型——扩展基类的类,但是我得到一个编译错误,抱怨我不能返回'this',因为它不是泛型参数的实例 export abstract class AbstractLoadable<T extends AbstractLoadable<T>> { protected isAngu

我正在尝试为一个量角器页面对象编写一个通用基类。它是一个具有init方法的反射泛型类,在等待或不等待angular后返回自身,具体取决于对象是否为angular。我希望init方法返回正确的类型——扩展基类的类,但是我得到一个编译错误,抱怨我不能返回'this',因为它不是泛型参数的实例

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.
    }
}
导出抽象类AbstractLoadable{
受保护的isAngularComponent:布尔值;
公共构造函数(isAngularComponent:boolean=true){
this.isAngularComponent=isAngularComponent;
}
公共initComponent():T{
browser.waitForAngularEnabled(此.isAngular组件);
if(此.isAngularComponent){
browser.waitForAngular();
}
将其作为T返回;//此处出错。
}
}
错误是:无法将类型“
this
”转换为类型“
T
”。类型“
AbstractLoadable
”与类型“
T
”不可比较


这种模式在Java中工作,我不熟悉JavaScript和typescript。有可能在Typescript中实现这一点吗?

与java不同,Typescript具有以下功能,在这种情况下非常有用:

export abstract class AbstractLoadable {
    protected isAngularComponent: boolean;

    public constructor(isAngularComponent: boolean = true) {
        this.isAngularComponent = isAngularComponent;
    }

    public initComponent(): this {
        browser.waitForAngularEnabled(this.isAngularComponent);
        if(this.isAngularComponent) {
            browser.waitForAngular();
        }

        return this;
    }
}
正如您所见,它完全消除了这种情况下对泛型的需求。
编译器知道正确的类并推断出返回的
this
是什么,因此如果假设您有:

class MyClass extends AbstractLoadable { ... }
然后:

将返回类型为
MyClass
的值

let instance = new MyClass().initComponent();