Um das eigentliche Problem zu erklären, auf das tslint hinweist, ein Zitat aus der JavaScript-Dokumentation der for ... in-Anweisung :
Die Schleife durchläuft alle aufzählbaren Eigenschaften des Objekts selbst und die Eigenschaften, die das Objekt vom Prototyp seines Konstruktors erbt (Eigenschaften, die näher am Objekt in der Prototypkette liegen, überschreiben die Eigenschaften der Prototypen).
Im Grunde bedeutet dies, dass Sie Eigenschaften erhalten, die Sie möglicherweise nicht erwarten (aus der Prototypenkette des Objekts).
Um dies zu lösen, müssen wir nur über die eigenen Eigenschaften des Objekts iterieren. Wir können dies auf zwei verschiedene Arten tun (wie von @Maxxx und @Qwertiy vorgeschlagen).
Erste Lösung
for (const field of Object.keys(this.formErrors)) {
...
}
Hier verwenden wir die Object.Keys () -Methode, die ein Array der eigenen aufzählbaren Eigenschaften eines bestimmten Objekts in derselben Reihenfolge zurückgibt, wie sie von einer for ... in-Schleife bereitgestellt wird (der Unterschied besteht darin, dass eine for-in-Schleife Eigenschaften in auflistet auch die Prototypenkette).
Zweite Lösung
for (var field in this.formErrors) {
if (this.formErrors.hasOwnProperty(field)) {
...
}
}
In dieser Lösung iterieren wir alle Eigenschaften des Objekts, einschließlich derjenigen in seiner Prototypkette, verwenden jedoch die Methode Object.prototype.hasOwnProperty () , die einen Booleschen Wert zurückgibt, der angibt, ob das Objekt die angegebene Eigenschaft als eigene (nicht geerbte) Eigenschaft hat, um zu filtern die geerbten Eigenschaften aus.