首页 > 解决方案 > 类型:类由抽象类扩展

问题描述

我有抽象类:

abstract class DataType<D> {
  constructor(protected data: D) {}

  ...other
}

和我的抽象类扩展的类:

type PersonData = {
  firstName: string;
  lastName: string;
  ...other props
}

class Person extends DataType<PersonData> {
  ...methods with body specific for person
}

我需要像这样在 const 中保存类 Person (和其他):

const DataClasses: DataConstructor = {
  person: Person
  ...other
}

我需要这样使用它:

new DataClasses['person']({...PersonData}) // exacly is same as: new Person({...PersonData})

但我对 DataConstructor 类型有疑问。我不知道如何动态地做到这一点。我尝试了很多组合,最接近的是:

type DataConstructor = {
   [name: string]: new (data: ConstructorParameters<typeof Person>[0]) =>
                              DataType<ConstructorParameters<typeof Person>[0]>
}

但我必须在 typeof 中添加 Person 类。我需要这个动态。DataConstructor 必须接受由 DataType 扩展的任何类并返回对象以使用它:new DataClasses['person'](PersonDataObjec)。所有类在构造函数中只有一个属性——数据。

标签: javascripttypescriptgenericstypestypescript-generics

解决方案


推荐阅读