我经常需要使用仅在组件视图中使用的参数来扩展我的API模型。
例如,我有一个模型:
export class Person {
name: string;
surname: string;
address: string;
}
这是我从API中获得的东西:
getPersons(): Observable<Person[]> {
return this.httpClient.get<Person[]>`${environment.API}/person`);
}
当我在组件中获得此参数时,我经常需要使用参数/属性扩展模型,在请求后或只是简单的“ active” /“ select”参数进行UI可视化跟踪后,我便会进行数据处理。
用于此目的的哪种方法。我知道2种解决方案:
1)即使该参数不参与服务器响应,也要将其添加到类模型中,只需将它们与标准参数分开即可:
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
}
2)使用这些参数制作另一个扩展类:
export class PersonExtended extends Person {
ui_active: boolean;
ui_fullName: string
}
但是这种方法使事情变得复杂,因为我有2个模型,并且需要一直在它们之间切换。
这种情况下的最佳实践是什么?
答案 0 :(得分:3)
只需使用?
-运算符将这些字段设置为可选:
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;
}
并使用它,例如:
this.omitFields(el, ['ui_active', 'ui_fullName']);
答案 1 :(得分:2)
我认为按代码排列的第二个选项是正确的,但是据我所知第一个选项没有什么问题,只需确保新参数可以为null或以某种方式被忽略,这样就可以避免错误,如果不将其设置在不需要它们。