gpt4 book ai didi

typescript - 从基类静态方法返回子类的新实例

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:06 24 4
gpt4 key购买 nike

我坚持的地方:

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

喜欢:

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
}

提前致谢!

最佳答案

解决方法很简单:

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

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

关于typescript - 从基类静态方法返回子类的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39429207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com