【发布时间】:2021-01-14 10:03:40
【问题描述】:
我有一个这样填充的类(来自 json):
export class blogEntry {
hasImage: boolean;
@newItem(Video) video: Video;
@newItem(Author) author: Author;
@newItem(Comments) comments: Comments;
@newItem(Picture) blogImage: Picture;
@newItem(PictureCaption) pictureCaption: PictureCaption;
@newItem(TextSummary) summary: TextSummary;
constructor(data: blogEntry|Object) {
Object.assign(this, data);
}
}
装饰器是这样定义的(在单独的文件中):
export function newItem<T extends EditablePart>(type) {
return function(target: Object, propertyKey) {
let value: T;
Object.defineProperty(target, propertyKey, {
get: function(): T {
return value;
},
set: function(newVal: T) {
if (newVal) {
value = construct(type, newVal);
}
},
enumerable: true
});
}
}
export function construct<T extends EditablePart>(type: { new(...args : any[]): T ;}, newVal) {
return new type(newVal);
}
所有带注释的类型都扩展了 EditablePart。
使用此类更改数据后(通过使用带注释的字段,即通过那里提供的 getter/setter),我想将类数据作为 json 保存到我的后端服务器。在介绍类中的装饰器之前,我可以使用:
publish(): blogEntry {
return new blogEntry(this);
}
现在我只得到 hasImage。在 chrome 中使用开发人员工具时,我可以看到这些字段,但我必须单击它们后面的点('invoke property getter')才能检索数据。
有没有想过如何克隆这个类(我想继续使用这个类)?任何帮助将不胜感激!
【问题讨论】:
标签: json angular typescript clone decorator