我有一些形式的班级
abstract class A {}
class AB extends A {}
class AC extends A {}
class AD extends A {}
现在在文件中,我要导出类名->构造函数的映射,如下所示:
export default {
AB,
AC,
AD
};
此导出的类型应该是什么?
我尝试过:
type Mappings = {
[typeName: string]: typeof A
};
但是当我尝试类似的操作时:
import mappings from '..';
let s: string;
const TypeName = mappings[s];
const pr = new TypeName(); // ERROR
我收到错误消息:Cannot create an instance of an abstract class
,因为A是抽象的。
我实质上是在尝试找出如何用typeof A
之类的东西来代替subtypeof A
或其他可行的方法。
答案 0 :(得分:0)
使用typeof AbstractClass
时,类型将表示抽象类本身,这意味着它将具有无法调用的抽象构造函数。最简单的解决方案是改用构造函数签名。构造函数将返回抽象类的实例,但不会是原始抽象基类中的抽象构造函数。
type Mappings = {
[typeName: string]: new () => A
};