从基类静态方法返回Child类的新实例

时间:2016-09-10 18:21:14

标签: typescript

我被困在:

我想要一个可以返回其子类的新对象的Base类。

像:

export class Base {
    constructor () {
    }

    static query() {
      //return a new object of class from which this function is called.
    }

}

export class Child extends Base {

}

现在在我的IndexComponent类

export class IndexComponent {
 var user = Child.query() // By this I have a new object of Child class in user variable
}

提前谢谢!

1 个答案:

答案 0 :(得分:4)

解决方案很简单:

export class Base {
    constructor () {}

    static query() {
        return new this();
    }
}

let base = Base.query(); // Base {}
let child = Child.query(); // Child {}

code in playground

这是有效的,因为在执行静态函数时,this是构造函数 你可以在编译的js中看到:

var Base = (function () {
    function Base() {
    }
    Base.query = function () {
        return new this();
    };
    return Base;
}());

query函数是Base构造函数的属性,也是Child的属性,因为它扩展了Base

这里的问题是如何输入这个query函数,以便编译器知道返回的类型是什么。
现在你需要这样做:

let base = Base.query(); // here base is of type 'Base'
let child: Child = Child.query(); // need to declare the type
// or
let child2 = Child.query() as Child; // or assert it

我无法想出一种方法可以让编译器推断出返回的正确类型,很想知道是否有人有想法。