Javascript 面向组件的角度扩展API模型
我经常需要使用仅在组件视图中使用的参数来扩展API模型 例如,我有一个模型:Javascript 面向组件的角度扩展API模型,javascript,angular,typescript,Javascript,Angular,Typescript,我经常需要使用仅在组件视图中使用的参数来扩展API模型 例如,我有一个模型: export class Person { name: string; surname: string; address: string; } 这是我从API得到的: getPersons(): Observable<Person[]> { return this.httpClient.get<Person[]>`${environment.API}/person`); }
export class Person {
name: string;
surname: string;
address: string;
}
这是我从API得到的:
getPersons(): Observable<Person[]> {
return this.httpClient.get<Person[]>`${environment.API}/person`);
}
2) 使用这些参数创建另一个扩展类:
export class Person {
name: string;
surname: string;
address: string;
ui_active: boolean; // I know that those parameters are not from API
ui_fullName: string; // response but they are here to make my life easier
}
export class PersonExtended extends Person {
ui_active: boolean;
ui_fullName: string
}
但是这种方法使事情变得复杂,因为我有两个模型,我需要一直在它们之间切换
这种情况下的最佳做法是什么?只需使用
?
-运算符将这些字段设置为可选字段:
export class Person {
name: string;
surname: string;
address: string;
ui_active?: boolean;
ui_fullName?: string;
}
因此,您可以使用它们,但不必这样做
编辑:
如果必须在使用以下通用方法时删除它们:
private omitFields<T>(object: T, fields: Array<string>): T {
for (let field of fields) {
delete object[field];
}
return object;
}
我认为codewise第二个选项是正确的,但据我所知,第一个选项没有错,只要确保新参数可以为null或以某种方式忽略,这样,如果不将它们设置在不需要的位置,就不会出现错误。谢谢您的回答。我更喜欢这种方法,但我对此表示怀疑,因为我多次听到这不是最佳做法。我更新了我的答案。我添加了一个通用方法,如果需要,您可以使用该方法删除可选字段,例如,如果您必须将此对象重新发送到后端。也许我们还可以向使用此类字段扩展的每个类添加一个方法,例如“getOriginalAPIObject”,该方法可以在不使用这些可选参数的情况下返回对象。在这种情况下,我不需要发送我想要转义的属性数组,每个类都会处理自己的可选参数?听起来很合理,但是您必须将已经包含的对象映射到基本对象。
this.omitFields(el, ['ui_active', 'ui_fullName']);