我正在尝试创建一个允许在运行时动态创建类的工厂,以便可以使用方法将数据从JSON还原到实际对象。
但是在我的代码中,我收到消息“ TS2511: Cannot create an instance of an abstract class
”。可以通过打字进行任何操作吗?
我正在使用Typescript v2.7.2
(Angular 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()
”,以将获取的对象恢复为具有所有功能的实际对象。
相同的问题
here和here讨论了相同的问题,但是他们没有以我可以使用的方式解决问题。
有人可以告诉我我应该更改什么,以强制只将子类赋予register()
函数的参数,并且我可以存储该类并用new()
实例化吗? / p>