Чтобы объяснить реальную проблему , на которую указывает tslint, приведем цитату из документации JavaScript оператора for ... in :
Цикл будет перебирать все перечисляемые свойства самого объекта и тех, которые объект наследует от прототипа своего конструктора (свойства, близкие к объекту в цепочке прототипов, переопределяют свойства прототипов).
Таким образом, в основном это означает, что вы получите свойства, которые вы не ожидаете получить (из цепочки прототипов объекта).
Чтобы решить эту проблему, нам нужно перебирать только собственные свойства объектов. Мы можем сделать это двумя различными способами (как предложено @Maxxx и @Qwertiy).
Первое решение
for (const field of Object.keys(this.formErrors)) {
...
}
Здесь мы используем метод Object.Keys (), который возвращает массив собственных перечислимых свойств данного объекта в том же порядке, что и в цикле for ... in (разница в том, что цикл for-in перечисляет свойства в прототип цепи).
Второе решение
for (var field in this.formErrors) {
if (this.formErrors.hasOwnProperty(field)) {
...
}
}
В этом решении мы перебираем все свойства объекта, включая свойства его цепочки прототипов, но используем метод Object.prototype.hasOwnProperty () , который возвращает логическое значение, указывающее, имеет ли объект указанное свойство как собственное (не унаследованное) свойство для фильтрации унаследованные свойства.