首页 > 解决方案 > 如何在方法中执行协变泛型返回类型?

问题描述

我有一个接口,我想要一个返回实现类实例的方法,我当前的实现是这样的:

interface SuperClass<T extends SuperClass<any>> {
  returnSelf(): T; 
}

class SubClass implements SuperClass<SubClass> {
  public returnSelf(): SubClass {
    return this;
  }
}

const subclass: SubClass = new SubClass().returnSelf();

但是,这使用了any我知道应该不惜一切代价避免使用的类型。我的问题是,这种类型安全吗?我想不出它不会出现的任何情况,但我宁愿使用更安全的unknown类型,但它不会编译。为什么?有没有更惯用的方式来做到这一点?

标签: typescript

解决方案


您可以this用作类型。
https://www.typescriptlang.org/docs/handbook/advanced-types.html#polymorphic-this-types

interface SuperClass {
  returnSelf(): this;
}

class SubClass implements SuperClass {
  public returnSelf(): this {
    return this;
  }
}

const subclass: SubClass = new SubClass().returnSelf();

推荐阅读