Mensaje de error de pelusa:
src / app / detail / edit / edit.component.ts [111, 5]: para (... en ...) las declaraciones deben filtrarse con una declaración if
Fragmento de código (es un código de trabajo. También está disponible en la sección de validación del formulario angular.io ):
for (const field in this.formErrors) {
// clear previous error message (if any)
this.formErrors[field] = '';
const control = form.get(field);
if (control && control.dirty && !control.valid) {
const messages = this.validationMessages[field];
for (const key in control.errors) {
this.formErrors[field] += messages[key] + ' ';
}
}
}
¿Alguna idea de cómo solucionar este error de pelusa?
angular
angular2-forms
angular-cli
tslint
choopage - Jek Bao
fuente
fuente
Respuestas:
Para explicar el problema real que señala tslint, una cita de la documentación de JavaScript de for ... en la declaración :
Entonces, básicamente, esto significa que obtendrá propiedades que podría no esperar obtener (de la cadena de prototipos del objeto).
Para resolver esto, necesitamos iterar solo sobre las propiedades propias de los objetos. Podemos hacer esto de dos maneras diferentes (como lo sugieren @Maxxx y @Qwertiy).
Primera solución
Aquí utilizamos el método Object.Keys () que devuelve una matriz de propiedades enumerables propias de un objeto dado, en el mismo orden que el proporcionado por un bucle for ... in (la diferencia es que un bucle for-in enumera propiedades en la cadena prototipo también).
Segunda solución
En esta solución, iteramos todas las propiedades del objeto, incluidas las de su cadena de prototipos, pero utilizamos el método Object.prototype.hasOwnProperty () , que devuelve un valor booleano que indica si el objeto tiene la propiedad especificada como propiedad propia (no heredada), para filtrar las propiedades heredadas
fuente
Object.keys
es ES5. Lo único de ES6 es for-of loop. Podemos iterar la matriz en el bucle habitual de 0 a su longitud y sería ES5.this.formErrors
es nulo,for...in
simplemente no haga nada, mientrasfor ... of Object.keys()
arrojaría un error.Object.keys(obj).forEach( key => {...})
?Una forma más ordenada de aplicar la respuesta de @ Helzgate es posiblemente reemplazar su 'for ... in' con
fuente
if (this.formErrors.hasOwnProperty(field))
.fuente
use Object.keys:
fuente
Si el comportamiento de for (... in ...) es aceptable / necesario para sus propósitos, puede decirle a tslint que lo permita.
en tslint.json, agregue esto a la sección "reglas".
De lo contrario, @Maxxx tiene la idea correcta con
fuente
Creo que este mensaje no se trata de evitar su uso
switch
. En cambio, quiere que lo compruebeshasOwnProperty
. El fondo se puede leer aquí: https://stackoverflow.com/a/16735184/1374488fuente