【问题标题】:Typescript - exporting map of subtypesTypescript - 导出子类型的映射
【发布时间】:2019-03-19 13:47:57
【问题描述】:

我有一些表格类:

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 之类的东西或任何可行的方法。

【问题讨论】:

    标签: typescript inheritance types


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 2019-03-21
      • 2019-03-04
      • 2018-02-05
      • 2018-06-25
      • 2021-12-12
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多