To gerçek sorunu açıklamak tslint işaret olduğunu, JavaScript belgelerine bir alıntı için ... açıklamada :
Döngü, nesnenin kendisinin tüm numaralandırılabilir özellikleri üzerinde yineleyecektir ve nesne, yapıcısının prototipinden (prototip zincirindeki nesneye yakın olan özellikler prototiplerin özelliklerini geçersiz kılar) devralır.
Yani, temelde bu, elde etmeyi beklemediğiniz özellikleri (nesnenin prototip zincirinden) alacağınız anlamına gelir.
Bunu çözmek için sadece nesnelerin kendi özellikleri üzerinde yineleme yapmamız gerekir. Bunu iki farklı şekilde yapabiliriz (@Maxxx ve @Qwertiy tarafından önerildiği gibi).
İlk çözüm
for (const field of Object.keys(this.formErrors)) {
...
}
Burada, belirli bir nesnenin kendi numaralandırılabilir özelliklerinin bir dizisini, for ... in döngüsü tarafından sağlanan sırayla döndüren Object.Keys () yöntemini kullanırız (fark, bir for-in döngüsünün özellikleri numaralandırmasıdır) prototip zinciri de).
İkinci çözüm
for (var field in this.formErrors) {
if (this.formErrors.hasOwnProperty(field)) {
...
}
}
Bu çözümde, prototip zincirindeki olanlar da dahil olmak üzere nesnenin tüm özelliklerini yineliyoruz , ancak nesnenin belirtilen özelliğe sahip (miras alınmamış) özelliği olup olmadığını gösteren bir boole döndüren Object.prototype.hasOwnProperty () yöntemini kullanıyoruz. miras alınan özellikler.