我试图将对Abstract Class Constructor的引用作为函数参数传递。一切都适用于任何抽象类,但我无法将引用传递给抽象类构造函数,任何人都知道该怎么做?
abstract class AbstractPerson
{
}
function add<T>(provider: new(...rest) => T): void
{
}
add(AbstractPerson);
答案 0 :(得分:2)
您不应尝试使用new
实例化一个抽象类,因此它正确地与new(...rest: any[])=>any
签名不匹配。只要您不实例化抽象构造函数,就可以尝试引用其prototype
属性,因为它仍然具有该属性:
abstract class AbstractPerson {
}
function add<T>(provider: { prototype: T }): void {
}
add(AbstractPerson); // works now
// T inferred as AbstractPerson
希望有所帮助;祝你好运!
答案 1 :(得分:0)
您不能实例化一个抽象类。我会这样:
abstract class AbstractPerson
{
}
function add<T extends AbstractPerson>(provider: new(...rest) => T): void
{
}
class Person extends AbstractPerson { }
add(Person);
答案 2 :(得分:0)
我遇到了类似的问题,我需要传递一个抽象类,然后在列表中进行搜索以查找所有条目,这些条目是扩展该基类的类的实例。我修改了Jcalz的答案,以允许我在函数中使用instanceof:
abstract class AbstractObject {
}
function findMatch<T>(provider: { prototype: T } & Function): T {
let match: T;
for (const element of object_list){
if (element instanceof provider){
match = element;
}
}
// ... do some null check here
return match;
}
// match is inferred to be type 'AbstractObject'
const match = findMatch(AbstractObject);