你好,当我尝试动态合并2个对象时,我得到了tsc编译错误:我只试图合并对象的一些属性,而不想全部复制它们。下面的示例是类型记录类中的一个方法,它实现了所接收的参数"iUser"的相同接口,因此"this"是接收到的的相同类型对象。
举例:
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 ~
有人知道如何动态地做这件事吗?
发布于 2021-01-19 09:27:54
也许在类定义中有一些比iUser接口中的属性更严格的属性?因为您的错误说明了类似的情况。例如,考虑一下代码:
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和类中不同的属性,如下所示:
...
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
}
});
...https://stackoverflow.com/questions/65788311
复制相似问题