使用静态方法的打字稿继承

Posted

技术标签:

【中文标题】使用静态方法的打字稿继承【英文标题】:typescript inheritance using static method 【发布时间】:2019-01-24 17:49:54 【问题描述】:

有没有办法使用下面描述的方法来获得正确的类型。我努力了 使 makeInstance() 通用但我还没有获得扩展类型。代码如下。

class Base 
  name = 'foo';

  static makeInstance() 
    return new this();
  

class Extended extends Base 
  age = 10;


let base = Base.makeInstance() // is Base
let extended = Extended.makeInstance(); //should be Extended 

console.log(base.name);//ok
console.log(extended.age); //output ok; age doesn't exists
console.log(extended.name);// ok

【问题讨论】:

相关 GitHub 问题:github.com/Microsoft/TypeScript/issues/5863 感谢它解决了我的问题 【参考方案1】:

您可以在静态方法中添加泛型参数以推断正确调用该方法的类:

class Base 
    name = 'foo';

    static makeInstance<T>(this: new () => T) 
        return new this();
    

class Extended extends Base 
    age = 10;


let base = Base.makeInstance() // is Base
let extended = Extended.makeInstance(); //is Extended 

console.log(base.name);//ok
console.log(extended.age); //ok
console.log(extended.name);// ok

【讨论】:

以上是关于使用静态方法的打字稿继承的主要内容,如果未能解决你的问题,请参考以下文章

打字稿:猫鼬模式的静态方法

打字稿静态函数没有接收参数

打字稿中有啥好的静态代码分析工具吗? [关闭]

具有通用方法和继承的打字稿工厂,错误不可分配给类型

如何使用带有角度依赖注入的打字稿继承

茉莉花间谍对进口模块(打字稿)