javascript - ¿Existe una regla de ESLint o TSLint que verifique que un operador lógico de verdadero/falso no se aplique a números?
Hoy tuve un error donde inesperadamente salté una llamada a una función porque mi variable era 0:
const foo: number | undefined = getFoo();
if(foo) {
// Will not be called if foo is zero
doSomething(foo);
}
Este es un patrón que uso bastante a menudo, comprobando si una variable está definida. Esto funciona con todo, objetos, arreglos, cadenas... Excepto con números.
No es la primera vez que tengo un error así.
¿Hay una regla que me avise, algo como:
if(foo)
--- Warning, testing a number variable that can be defined, but equals to zero
Algo que me obligue a escribir:
if(foo !== undefined)
Es menos bonito, pero al menos tiene el comportamiento correcto.
Editar: después de pensar en esto, parece que el mismo problema puede ocurrir con el tipo string y el valor "" (cadena vacía)
Respuesta #1
tslint tiene expresiones booleanas estrictas.
Respuesta #2
Para Typescript ESLint (ya que TSLint ha sido desaprobado), hay una regla con el mismo nombre que Zbigniew Zagórski mencionó en la otra respuesta: strict-boolean-expressions