我使用的是 WebStorm 2016.2.2、TypeScript 2.1 和 Node.js。
由于某种原因,isNaN
被声明为只接受数字的函数:
declare function isNaN(number: number): boolean;
我尝试将它改为任何类型,但似乎对TSC没有影响。我仍然得到相同的错误提示:参数类型为“字符串”的值无法分配给类型为“数字”的参数
我的代码(简化版):
isNaN("10");
我该如何解决/规避这个问题?
编辑:
需要注意的是,根据规范,isNaN的参数可以是任何类型:Number.isNaN()
另外:我的代码已经被简化了。实际上,我会收到一个可能是字符串或数字的参数,如果它是字符串,它可能是我想要转换为数字的字符串数字(“10”),也可能是一个简单的字符串(“Hello world”)。
我不想包含整个代码以避免让问题变得太长,但因为它引起了混乱,所以这是我的真实代码:
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;
}
isNaN()
方法来判断该表达式的结果是否为数字。传递字面量有些多余,你认为呢? - Scott Marcusnumber
或any
以外的任何东西的情况下呢? - Nitzan Tomerany
一起使用:let a: any = "str"; console.log(isNaN(a));
在编译器中是可以的,事实上这也是可以的:isNaN("str" as any)
。 - Nitzan Tomer