quitar problema numero number isnan float error entero como javascript node.js typescript webstorm

problema - nan javascript parseint



TypeScript isNan solo acepta un nĂºmero (4)

Trabajo con WebStorm 2016.2.2, TypeScript 2.1, Node.js.

Por alguna razón, isNan se declara como una función que solo acepta un número:

declare function isNaN(number: number): boolean;

Intenté cambiarlo por cualquiera, pero parece que no influye en el TSC. Todavía me sale el mismo error:

El argumento de tipo ''cadena'' no se puede asignar al parámetro de tipo ''número''

Mi código (simplificado):

isNan("10");

¿Cómo puedo resolverlo / solucionarlo?

Editar:

Observe que, según la especificación, el parámetro de isNan puede ser de cualquier tipo: Number.isNan()

También: Mi código fue simplificado. En realidad recibo un parámetro que puede ser una cadena o un número, y si es una cadena, puede ser un número de cuerda que me gustaría convertir a número ("10") o una cadena simple ("Hola mundo") .

No quise hacer que esta pregunta fuera larga al incluir todo mi código, pero debido a que causó confusión, este es mi código real:

if (typeof expectedValue === "string" && !isNaN(expectedValue)) { expectedValue = +expectedValue; } if (typeof actualValue === "string" && !isNaN(ctualValue)) { actualValue = +actualValue; } switch (this.operator) { case Operator.equal: return actualValue == expectedValue; case Operator.notEqual: return actualValue === undefined || actualValue != expectedValue; case Operator.greaterThan: return actualValue > expectedValue; case Operator.littleThan: return actualValue < expectedValue; case Operator.greaterOrEqual: return actualValue >= expectedValue; case Operator.littleOrEqual: return actualValue <= expectedValue; }


En primer lugar, solo los valores de number de tipo pueden ser NaN . Entonces, si el contexto estático le dice que su valor es de tipo string por ejemplo, puede estar seguro de que no es un NaN . Si tiene un valor con el tipo string|number (que debe evitarse por cierto) todavía puede decidir cómo manejar esto. En sentido estricto, el valor de la cadena "foo" no es NaN , ya que NaN es un valor específico especificado en el estándar IEEE para los números flotantes. Pero aún así, en javascript, isNaN("foo") será verdadero, ya que la función coerectará primero la cadena a un número , y esa coerección dará como resultado un NaN . Typescript intenta tomar ventaja de los tipos aquí, intenta evitar que isNaN donde no deberías.


No deberías resolverlo porque así es como funciona JavaScript.

Solo lanza la entrada al número primero

Number("10") // 10 Number("abc") // NaN

y luego verifique el resultado con la función isNan:

isNaN(Number("abc"))



Te aconsejo que implementes tu código de manera diferente.
Las razones:

  1. Puede ser breve, pero no es fácil entender lo que está pasando
  2. Usar isNaN no es la mejor opción aquí: isNaN("") devuelve false

Mejor trata de convertir el valor en un número y verifica si eso es NaN o no (como escribió @smnbbrv):

if (typeof expectedValue === "string" && !Number.isNaN(Number(expectedValue))) { expectedValue = Number(expectedValue); }

Editar

Puede pasar su valor como any :

isNaN(ctualValue as any)

Para omitir la comprobación del compilador.