Typescript-导出子类型的映射

时间:2018-10-15 07:18:39

标签: typescript inheritance types

我有一些形式的班级

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或其他可行的方法。

1 个答案:

答案 0 :(得分:0)

使用typeof AbstractClass时,类型将表示抽象类本身,这意味着它将具有无法调用的抽象构造函数。最简单的解决方案是改用构造函数签名。构造函数将返回抽象类的实例,但不会是原始抽象基类中的抽象构造函数。

type Mappings = {
  [typeName: string]: new () => A
};