使用本地存储中的功能还原类

时间:2018-07-05 08:41:43

标签: typescript oop parsing inheritance

我正在尝试创建一个允许在运行时动态创建类的工厂,以便可以使用方法将数据从JSON还原到实际对象。 但是在我的代码中,我收到消息“ TS2511: Cannot create an instance of an abstract class”。可以通过打字进行任何操作吗?

我正在使用Typescript v2.7.2Angular 6.0.7支持的最新版本)


可解析类(抽象基类)

export abstract class Parsable {
  public abstract readonly __classname: string; // Save the classname for restoring
  public revive(): void
}

ParsableEntities (我在运行时存储类的地方)

export class ParsableEntities {

  private static entities: Map<string, typeof Parsable> = new Map();

  public static register<T extends typeof Parsable>(parsableClass: T): void {
    const className = new parsableClass().__className;
    ParsableEntities.entities.set(className, parsableClass);
  }
}

const className = new parsableClass().__className;行引发错误'TS2511: Cannot create an instance of an abstract class'。这是由于我没有强迫Parsable类的子级作为参数。我有什么办法可以做到这一点(extends不能解决问题)?


我的目标

我的目标是能够这样向列表中添加类:

export class SomeClass extens Parsable {__classname = 'SomeClass'}
export class SomeOtherClass extends Parsable {__classname = 'SomeOtherClass'}


ParsableEntities.register(SomeClass);
ParsableEntities.register(SomeOtherClass);

可以通过getClass()类中的ParsableEntities函数创建这些类。然后,存储服务可以在类上调用“ revive()”,以将获取的对象恢复为具有所有功能的实际对象。


相同的问题

herehere讨论了相同的问题,但是他们没有以我可以使用的方式解决问题。

有人可以告诉我我应该更改什么,以强制只将子类赋予register()函数的参数,并且我可以存储该类并用new()实例化吗? / p>

0 个答案:

没有答案