在Typecript对象类中保留原始属性

时间:2019-04-13 08:36:57

标签: javascript angular typescript

与新对象进行映射时,如何保留类对象的原始属性。

假设我有一个具有以下属性的类。

export class User{
 public name: string;
 public age: number;
 public internalId: number;
}

以下是我从回调Subscribe()函数分配值的地方

this.userService.getUnratedJobNotification().subscribe(
            (data)=>{
                if(data && data.length > 0){
                    this.User = data;
                }
        });

现在,我从服务中收到的数据仅包含名称和年龄。不是internalId属性。

通过订阅功能分配后,我只留下了姓名和年龄。

我真的不知道这个问题是不是已经回答过,或者至少我真的不知道问什么是正确的方法。

4 个答案:

答案 0 :(得分:2)

使用Object.assign。

this.User = Object.assign({}, this.User, data);

答案 1 :(得分:2)

您可以使用Object.assign将所有属性从返回的对象复制到实际的User对象中。

我建议在订阅前使用RxJS的map运算符:

this.userService.getUnratedJobNotification().pipe(
  map(data => Object.assign(new User(), data))
).subscribe((user: User) => {
  this.User = user;
});

答案 2 :(得分:0)

您还可以使用lodash merge处理复杂的实体:

var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};

var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};

_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }

答案 3 :(得分:0)

this.User = data;替换为this.User = {...this.User, ...data};

this.userService.getUnratedJobNotification().subscribe(
  data => {
    if (data) {
      this.User = { ...this.User, ...data };
    }
  });