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

Typescript 将静态方法定义为当前类的返回实例,typescript,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 类基{ static foo():;//遗憾的是,您需要显式注释或以编译器可以推断的方式编写: class Ba

我想做这样的事情:

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
类基{

static foo():;//遗憾的是,您需要显式注释或以编译器可以推断的方式编写:

class Base {
   static foo() {
       return new Base();
   } 
}

class Subclass extends Base {
    static foo() {
       return new Subclass();
    }
}

Subclass.foo()

在这两种情况下,
子类
都需要某种形式的重复定义。

TypeScript在过去一年中一直在积极添加功能,包括支持.compiles 2.3或更高版本:

接口构造函数{
新(…args:any[]):M
}
阶级基础{
静态foo(this:Constructor):T{
返回新的this()
}
}
类子类扩展了基{
只读条=1
}
//通过调用特定于子类的方法证明我们有一个子类实例:
子类.foo().bar

这非常有用。他们应该更清楚地记录它。但是这样做忽略了类型的好处check@Singgum3b此解决方案是类型安全的afaict。您是否使用最近的类型脚本(例如,从今年开始)?
…args:any[]
这不是跳过任何后续类构造函数的类型检查吗?啊,是的,正确。
…args:any[]
只是一个例子。如果您需要构造函数的类型安全性,当然应该修改构造函数以匹配类的构造函数签名。