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议你以不同的方式实现你的代码。
原因:
- 这可能是短暂的,但要理解发生的事情并不容易
- 使用
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"))
你可以使用全局作用域函数isFinite()
…不要使用Number.isFinite()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite
首先,只有typesnumber
值可以是NaN
。 所以如果静态上下文告诉你你的值是string
types的话,你可以确定它不是NaN
。 如果你有一个string|number
types的string|number
(这应该避免顺便说一句),你仍然可以决定如何处理这个。 严格来说,string值"foo"
不是NaN
,因为NaN
是浮点数在IEEE标准中指定的特定值。 但是,在javascript中, isNaN("foo")
将是真实的,因为函数会首先将string同步到一个数字 ,并且这个coerection产生一个NaN
。 Typescript尝试利用这里的types,它试图阻止你在不应该使用isNaN
地方使用。
- 如何为摩卡unit testing提供自定义错误消息的chai expect?
- 在打字稿中访问Nodejsstream的highWaterMark属性给出:“Property'_readableState'不存在”错误
- testing失败:ReferenceError:SpeechSynthesisUtterance未定义
- 从Java运行TypeScript编译器
- typescript node.js表示路由分隔文件的最佳实践
- 包括TypeScript编译上下文中的app.component.ts
- 将Typescript 2.3模块发布到NPM for Angular 4 Consumption
- Aurelia应用程序“Hello World”根本不工作
- Typescript无法findExpress模块