首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类型记录中,两个相同类型的对象之间只动态复制一些属性

在类型记录中,两个相同类型的对象之间只动态复制一些属性
EN

Stack Overflow用户
提问于 2021-01-19 09:05:26
回答 1查看 122关注 0票数 1

你好,当我尝试动态合并2个对象时,我得到了tsc编译错误:我只试图合并对象的一些属性,而不想全部复制它们。下面的示例是类型记录类中的一个方法,它实现了所接收的参数"iUser"的相同接口,因此"this"是接收到的的相同类型对象。

举例:

代码语言:javascript
复制
 updatefromUser(userSave: iUser) {
            let propToValidate: (keyof iUser)[]
            propToValidate = ["Country", "City", "State", "Zip", "VATnr", "Language"]
            let updateData: boolean = false;
            propToValidate.forEach(ele => {
                if (this[ele] != userSave[ele]) {
                    this[ele] =  userSave[ele]
                    updateData = true
                }
            });
            return updateData
        }

编译错误说:

错误TS2322:输入“string、string[]、error、Date、iAuthUserId[]、财政、iAuthUser[]、null”类型不能输入“string& iAuthUserId[] & iAuthUser[] & Date &string[]”。输入'null‘不能指定键入'string & iAuthUserId[] & iAuthUser[] & Date & string[]’。输入'null‘不能分配到输入'string’。112 thisele = userSaveele ~

有人知道如何动态地做这件事吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-19 09:27:54

也许在类定义中有一些比iUser接口中的属性更严格的属性?因为您的错误说明了类似的情况。例如,考虑一下代码:

代码语言:javascript
复制
interface iUser {
  id: string,
  name: string|null
}

class User implements iUser {
  id: string;
  name: string;

  update(userSave: iUser) {
    let propToValidate: (keyof iUser)[]
    propToValidate = ["id", "name"]
    let updateData = false;
    propToValidate.forEach(ele => {
      if (this[ele] != userSave[ele] && typeof this[ele] === typeof userSave[ele]) {
          this[ele]=  userSave[ele]
          updateData = true
      }
    });
    return updateData
  }
}

iUser接口允许名称为null,但类不允许。会出现与您类似的错误,不幸的是,它没有告诉我们iUser的确切属性与用户类不兼容。

可能的解决方案是使所有属性都相同,或者检查iUser和类中不同的属性,如下所示:

代码语言:javascript
复制
...
propToValidate.forEach(ele => {
  if (this[ele] != userSave[ele] && typeof this[ele] === typeof userSave[ele]) {
      if (ele === 'name') {
        this[ele] =  userSave[ele] ?? ''
      }
      else {
        this[ele]=  userSave[ele]
      }
      updateData = true
  }
});
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65788311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档