TypeScript isNan只接受一个数字

我使用WebStorm 2016.2.2,TypeScript 2.1,Node.js.

出于某种原因, isNan被声明为只接受一个数字的函数:

 declare function isNaN(number: number): boolean; 

我试图改变它,但它看起来不影响TSC。 我仍然得到同样的错误:

“string”types的参数不能分配给“number”types的参数

我的代码(简体):

 isNan("10"); 

我该如何解决/解决方法呢?


编辑:

请注意,根据规范,isNan的参数可以是任何types: Number.isNan()

另外:我的代码被简化了。 我实际上收到一个参数,可能是一个string或一个数字,如果它是一个string,它可能是一个我想转换为数字(“10”)或一个简单的string(“你好世界”) 。

我不想通过包括我的整个代码来解决这个问题,但是由于它造成了混乱,这是我真正的代码:

  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; } 

我build议你以不同的方式实现你的代码。
原因:

  1. 这可能是短暂的,但要理解发生的事情并不容易
  2. 使用isNaN不是这里最好的select: isNaN("")返回false

你最好尝试将该值转换为数字,并检查是否是NaN (如@smnbbrv写的):

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

编辑

您可以将您的价值传递给any

 isNaN(ctualValue as any) 

绕过编译器检查。

你不应该解决它,因为这是JavaScript的工作原理。

只需将input先input数字即可

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

然后用isNan函数检查结果:

 isNaN(Number("abc")) 

首先,只有typesnumber值可以是NaN 。 所以如果静态上下文告诉你你的值是stringtypes的话,你可以确定它不是NaN 。 如果你有一个string|numbertypes的string|number (这应该避免顺便说一句),你仍然可以决定如何处理这个。 严格来说,string值"foo"不是NaN ,因为NaN是浮点数在IEEE标准中指定的特定值。 但是,在javascript中, isNaN("foo")将是真实的,因为函数会首先将string同步到一个数字 ,并且这个coerection产生一个NaN 。 Typescript尝试利用这里的types,它试图阻止你在不应该使用isNaN地方使用。