首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeScript isNaN只接受一个数字

TypeScript isNaN只接受一个数字
EN

Stack Overflow用户
提问于 2017-02-08 17:41:20
回答 8查看 52.5K关注 0票数 90

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

由于某些原因,isNaN被声明为只接受数字的函数:

代码语言:javascript
运行
复制
declare function isNaN(number: number): boolean;

我试着把它修改成任何,但看起来它对TSC没有影响。我仍然会遇到同样的错误:

类型'string‘的参数不能分配给'number’类型的参数。

我的代码(简化):

代码语言:javascript
运行
复制
isNaN("10");

我如何解决/解决这个问题?

编辑:

注意,根据规范,isNaN的参数可以是任何类型:Number.isNaN()

还有:我的代码被简化了。实际上,我收到的参数可能是字符串或数字,如果是字符串,则可能是我希望转换为数字("10")或简单字符串("Hello“)的字符串。

我不想通过包含整个代码来提出这个问题,但是由于它引起了混乱,这是我真正的代码:

代码语言:javascript
运行
复制
            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;
            }
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2017-02-08 18:43:06

我建议您以不同的方式实现代码。

理由如下:

  1. 它可能很短,但很难理解到底发生了什么
  2. 在这里使用isNaN不是最好的选择:isNaN("")也返回false

您最好尝试将该值转换为一个数字,并检查它是否为NaN (如@smnbbrv所写):

代码语言:javascript
运行
复制
if (typeof expectedValue === "string" && !Number.isNaN(Number(expectedValue))) {
    expectedValue = Number(expectedValue);
}

编辑

您可以将您的值传递为any

代码语言:javascript
运行
复制
isNaN(ctualValue as any)

以绕过编译器检查。

票数 83
EN

Stack Overflow用户

发布于 2017-02-08 17:45:06

您不应该解决这个问题,因为TypeScript就是这样工作的。

只需先将输入转换为数字

代码语言:javascript
运行
复制
Number("10") // 10
Number("abc") // NaN

然后使用isNan函数检查结果:

代码语言:javascript
运行
复制
isNaN(Number("abc"))
票数 20
EN

Stack Overflow用户

发布于 2020-09-05 06:38:29

具有讽刺意味的是,只有数字可以是NaN,因此需要首先将字符串转换为数字。

一个非常简单的方法是一元加运算符。

所以你可以做一个简单的isNaN(+"10")

记住,像+""+" "+"\n"这样的东西是0!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42120046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档