【问题标题】: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

【问题讨论】:

标签: typescript typescript-types


【解决方案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

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2017-12-04
    • 2013-10-20
    • 2012-06-21
    • 2015-03-20
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多