Angular 11 严格模式如何在循环中比较 属性 对象
Angular 11 strict mode how do you compare the to objects by property in a loop
我正在尝试将库升级到版本 11,严格模式。可以在此处找到代码,当不强制执行严格时以及在 angular 的早期版本中有效。 https://stackblitz.com/edit/angular-ivy-fsnmjo?file=src%2Fapp%2Fmodel%2Fmember.ts。我在成员 class 中定义了一个方法来确定 2 个对象是否“相等”。
在我的应用程序中,如果某些属性匹配,则成员相等。
我尝试了两种不同的方法来解决这个问题,“equalsV1”和“equalsV2”。
equalsV1 产生以下错误。
Error in src/app/model/member.ts (17:17) Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Member'. No index signature with a parameter of type 'string' was found on type 'Member'.
equalsV2 产生以下错误:
Error in src/app/model/member.ts (32:17) Type 'Extract<keyof this,
string>' cannot be used to index type 'Member'.
我的问题是如何通过 属性 比较对象而不明确引用每个 属性,即 memberTocompare.id === this.id 不是可接受的答案.
好吧,你可以和你们这些忠实的人一起去JSON.stringify
let obj1 = {t: 1};
let obj2 = {t: 1};
let obj3 = {t: 2};
let obj4 = {t: 1, x: 1};
let obj5 = {t: 1, x: () => {}};
let result1 = obj1 == obj2;
let result2 = JSON.stringify(obj1) === JSON.stringify(obj2);
let result3 = JSON.stringify(obj1) === JSON.stringify(obj3);
let result4 = JSON.stringify(obj1) === JSON.stringify(obj4);
// note that this is true as methods are not string-ified
let result5 = JSON.stringify(obj1) === JSON.stringify(obj5);
console.log({result1, result2, result3, result4, result5})
答案是更改以下内容:
if (memberToCompare[key] !== value) {
return false;
}
到
if ((memberToCompare as any)[key] !== value) {
return false;
}
我得到了 Thayne 对
的回答的线索
我的完整代码答案在这里https://stackblitz.com/edit/angular-ivy-2tjpxr?file=src%2Fapp%2Fmodel%2Fmember.ts
如果有人有更好的解决方案,我很乐意看到它。
我正在尝试将库升级到版本 11,严格模式。可以在此处找到代码,当不强制执行严格时以及在 angular 的早期版本中有效。 https://stackblitz.com/edit/angular-ivy-fsnmjo?file=src%2Fapp%2Fmodel%2Fmember.ts。我在成员 class 中定义了一个方法来确定 2 个对象是否“相等”。
在我的应用程序中,如果某些属性匹配,则成员相等。
我尝试了两种不同的方法来解决这个问题,“equalsV1”和“equalsV2”。
equalsV1 产生以下错误。
Error in src/app/model/member.ts (17:17) Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Member'. No index signature with a parameter of type 'string' was found on type 'Member'.
equalsV2 产生以下错误:
Error in src/app/model/member.ts (32:17) Type 'Extract<keyof this, string>' cannot be used to index type 'Member'.
我的问题是如何通过 属性 比较对象而不明确引用每个 属性,即 memberTocompare.id === this.id 不是可接受的答案.
好吧,你可以和你们这些忠实的人一起去JSON.stringify
let obj1 = {t: 1};
let obj2 = {t: 1};
let obj3 = {t: 2};
let obj4 = {t: 1, x: 1};
let obj5 = {t: 1, x: () => {}};
let result1 = obj1 == obj2;
let result2 = JSON.stringify(obj1) === JSON.stringify(obj2);
let result3 = JSON.stringify(obj1) === JSON.stringify(obj3);
let result4 = JSON.stringify(obj1) === JSON.stringify(obj4);
// note that this is true as methods are not string-ified
let result5 = JSON.stringify(obj1) === JSON.stringify(obj5);
console.log({result1, result2, result3, result4, result5})
答案是更改以下内容:
if (memberToCompare[key] !== value) {
return false;
}
到
if ((memberToCompare as any)[key] !== value) {
return false;
}
我得到了 Thayne 对
我的完整代码答案在这里https://stackblitz.com/edit/angular-ivy-2tjpxr?file=src%2Fapp%2Fmodel%2Fmember.ts
如果有人有更好的解决方案,我很乐意看到它。