Alo*_*lon 30 javascript node.js webstorm typescript
我使用WebStorm 2016.2.2,TypeScript 2.1,Node.js.
出于某种原因,isNan声明为只接受数字的函数:
declare function isNaN(number: number): boolean;
Run Code Online (Sandbox Code Playgroud)
我试图将其改为任何,但看起来它不会对TSC产生影响.我仍然得到同样的错误:
'string'类型的参数不能分配给'number'类型的参数
我的代码(简化):
isNan("10");
Run Code Online (Sandbox Code Playgroud)
我该如何解决/解决它?
编辑:
请注意,根据规范,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;
}
Run Code Online (Sandbox Code Playgroud)
Nit*_*mer 26
我建议你以不同的方式实现你的代码.
原因:
isNaN是不是最好的选择在这里:isNaN("")回报false以及你最好尝试将值转换为数字并检查是否存在NaN(如@smnbbrv所写):
if (typeof expectedValue === "string" && !Number.isNaN(Number(expectedValue))) {
expectedValue = Number(expectedValue);
}
Run Code Online (Sandbox Code Playgroud)
您可以将您的价值传递给any:
isNaN(ctualValue as any)
Run Code Online (Sandbox Code Playgroud)
绕过编译器检查.
你不应该解决它,因为这是JavaScript的工作方式.
只需将输入转换为数字
Number("10") // 10
Number("abc") // NaN
Run Code Online (Sandbox Code Playgroud)
然后使用isNan函数检查结果:
isNaN(Number("abc"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17308 次 |
| 最近记录: |