【发布时间】:2016-12-31 20:13:57
【问题描述】:
我在同一个 .ts 文件中有那些 TypeScript 类,因为存在导入依赖项。如果有人可以帮助我重构代码,我将不胜感激,以便我可以删除导入的循环引用:
第一个是摘要GenericModel:
export abstract class GenericModel {
nodeClass: string;
id: string = "0";
static fromJson(json: any): GenericModel {
if (json.nodeClass === "Entity") {
return EntityModel.fromJson(json);
}
else if(json.nodeClass === "User") {
return UserModel.fromJson(json);
}
return null;
}
}
另外两个类是EntityModel(如下所列)和UserModel:
export class EntityModel extends GenericModel {
nodeClass: string = "Entity";
alias: string;
description: string;
constructor(public text: string, public id: string, public uuid: string, alias: string, public rand:string = "") {
//[...]
}
//instance methods
//[...]
public static fromJson(json: any): EntityModel {
var entity = new EntityModel(json.text, json.id, json.uuid, json.alias, json.rand);
entity.description = json.description;
if (json.types) {
for (let type of json.types) {
let objectifiedType: EntityModel = EntityModel.fromJson(type);
entity.types.push(objectifiedType);
}
}
if (json.innerEntities){
for (let innerEntity of json.innerEntities) {
let objectifiedInnerEntity: EntityModel = EntityModel.fromJson(innerEntity);
entity.innerEntities.push(innerEntity);
}
}
return entity;
}
}
我在这里所做的是使用基于nodeClass 的静态调用fromJson() 的层次结构对JSON 进行反序列化。
很明显,如果GenericModel 在单独的文件中,则需要导入EntityModel 和UserModel
而另外两个如果它们在单独的文件中,则需要导入GenericModel。
GenericModel --- has to import --> EntityModel, UserModel
EntityModel --- has to import --> GenericModel
UserModel --- has to import --> GenericModel
我想知道是否有一种方法可以重构代码,使其能够实现现在的功能,而且这些类位于单独的 .ts 文件中。
谢谢!
【问题讨论】:
标签: typescript circular-dependency circular-reference