[英]Dynamic copy only some properties between 2 same typed object in Typescript
大家好,我在嘗試動態合並 2 個對象時遇到 tsc 編譯錯誤:我嘗試僅合並 object 的某些屬性,不想復制所有這些屬性。 下面的例子是typescript Class中的一個方法,它實現了與接收參數“iUser”相同的接口,因此“this”與接收參數的類型相同( “userSave” )
例子:
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:類型“字符串 | 字符串[] | 日期 | iAuthUserId[] | iAuthUser[] | null' 不可分配給類型 'string & iAuthUserId[] & iAuthUser[] & Date & string[]'。 類型 'null' 不可分配給類型 'string & iAuthUserId[] & iAuthUser[] & Date & string[]'。 類型“null”不能分配給類型“string”。 112 這個[ele] = userSave[ele] ~~~~~~~~~
任何人都知道如何動態地做到這一點?
也許 class 定義中的某些屬性比 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,但 class 不允許。 會有類似你的錯誤,不幸的是它沒有告訴我們 iUser 的確切屬性與用戶 class 不兼容。
可能的解決方案是使所有屬性相同,或者檢查 iUser 和 class 中不同的屬性,如下所示:
...
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
}
});
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.