我被困在:
我想要一个可以返回其子类的新对象的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
}
提前谢谢!
答案 0 :(得分:4)
解决方案很简单:
export class Base {
constructor () {}
static query() {
return new this();
}
}
let base = Base.query(); // Base {}
let child = Child.query(); // Child {}
这是有效的,因为在执行静态函数时,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
我无法想出一种方法可以让编译器推断出返回的正确类型,很想知道是否有人有想法。