【发布时间】:2022-01-26 15:14:58
【问题描述】:
我有以下代码:
class Base<TAttributes extends {} = {}> {
constructor(attributes: TAttributes) {}
}
class Extended extends Base<{test: string}> {
}
function test(test: typeof Base) {};
test(Extended);
我想要实现的是创建一个函数,它需要 Base 类类型的构造函数,并且我试图将更具体(扩展)类型的构造函数传递给它。不幸的是,由于泛型,打字稿抱怨说:
“typeof Extended”类型的参数不能分配给“typeof Base”类型的参数。 构造签名的类型不兼容。 类型 'new (attributes: { test: string; }) => Extended' 不可分配给类型 'new
(attributes: TAttributes) => Base'。 参数“属性”和“属性”的类型不兼容。 类型 'TAttributes' 不可分配给类型 '{ test: string; }'。 类型“{}”中缺少属性“测试”,但类型“{测试:字符串; }'
我不知道,我在这里做错了什么。如果我从基类中删除泛型参数,打字稿就不再抱怨了。有人可以为我指明方向,如何实现我想要的结果?
这里还有一个playground 链接。
【问题讨论】:
-
扩展类的构造函数不一定可以分配给
Base的构造函数(它可以采用完全不同的参数)。你到底需要什么? -
为了清楚起见,请仔细阅读您的第一段。还有,函数中的参数怎么处理?
-
@GuerricP 我正在尝试创建一个可以使用基类的静态端的函数。
-
@AdamBaranyai 您应该将此信息添加到您的问题中,因为它实际上描述了您的全部问题。
标签: typescript