将静态方法定义为当前类的返回实例

Gae*_*lan 3 typescript

我想做这样的事情:

class Base {
   static foo(): <???>; // <= What goes here?
}

class Subclass extends Base {}

Subclass.foo() // <= I want this to have a return type of Subclass, not Base
Run Code Online (Sandbox Code Playgroud)

mrm*_*mrm 7

在过去的一年中,TypeScript一直在积极地添加功能,包括支持在泛型中使用类类型此示例在2.3或更高版本中进行编译:

interface Constructor<M> {
  new (...args: any[]): M
}

class Base {
  static foo<T extends Base>(this: Constructor<T>): T {
    return new this()
  }
}

class Subclass extends Base {
  readonly bar = 1
}

// Prove we have a Subclass instance by invoking a subclass-specific method:
Subclass.foo().bar
Run Code Online (Sandbox Code Playgroud)