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

如果有人有更好的解决方案,我很乐意看到它。