我有那些TypeScript
類在相同的.ts文件,因爲有導入依賴關係。我將不勝感激,如果有人可以幫助我重構代碼,所以我可以去掉進口的循環引用:TypeScript中的這個循環依賴可以被重構,因此單獨的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文件的方式。
謝謝!
謝謝!我有這種感覺,我需要像你建議的工廠一樣添加一個新班級!感謝接口的提示/ json :) Btw什麼是'''類型UUID =編號;'''在最後?新年快樂! –
這只是一個類型別名。當你有一個類似於UID的東西時,它恰好是一個數字,但實際上它只是一個技術細節,並且它有自己的語義,所以你經常使用一個類型別名。這可確保您只能在預期的地方使用UID,並且您不會意外傳遞香草編號。 –
對我來說'''uuid'''雖然是一個字符串!我仍然可以這樣做:'''輸入UUID = string;'''?謝謝 –