我使用WebStorm 2016.2.2,TypeScript 2.1,Node.js。
由于某些原因,isNaN
被声明为只接受数字的函数:
declare function isNaN(number: number): boolean;
我试着把它修改成任何,但看起来它对TSC没有影响。我仍然会遇到同样的错误:
类型'string‘的参数不能分配给'number’类型的参数。
我的代码(简化):
isNaN("10");
我如何解决/解决这个问题?
编辑:
注意,根据规范,isNaN的参数可以是任何类型:Number.isNaN()
还有:我的代码被简化了。实际上,我收到的参数可能是字符串或数字,如果是字符串,则可能是我希望转换为数字("10")或简单字符串("Hello“)的字符串。
我不想通过包含整个代码来提出这个问题,但是由于它引起了混乱,这是我真正的代码:
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;
}
发布于 2017-02-08 18:43:06
我建议您以不同的方式实现代码。
理由如下:
isNaN
不是最好的选择:isNaN("")
也返回false
您最好尝试将该值转换为一个数字,并检查它是否为NaN
(如@smnbbrv所写):
if (typeof expectedValue === "string" && !Number.isNaN(Number(expectedValue))) {
expectedValue = Number(expectedValue);
}
编辑
您可以将您的值传递为any
isNaN(ctualValue as any)
以绕过编译器检查。
发布于 2017-02-08 17:45:06
您不应该解决这个问题,因为TypeScript就是这样工作的。
只需先将输入转换为数字
Number("10") // 10
Number("abc") // NaN
然后使用isNan函数检查结果:
isNaN(Number("abc"))
发布于 2020-09-05 06:38:29
具有讽刺意味的是,只有数字可以是NaN
,因此需要首先将字符串转换为数字。
一个非常简单的方法是一元加运算符。
所以你可以做一个简单的isNaN(+"10")
。
记住,像+""
、+" "
和+"\n"
这样的东西是0!
https://stackoverflow.com/questions/42120046
复制相似问题