Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 面向组件的角度扩展API模型_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 面向组件的角度扩展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`); }

我经常需要使用仅在组件视图中使用的参数来扩展API模型

例如,我有一个模型:

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']);