首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么TypeScript认为每个数字都有自己的类型?

为什么TypeScript认为每个数字都有自己的类型?
EN

Stack Overflow用户
提问于 2017-08-31 19:27:49
回答 3查看 293关注 0票数 9

表达式1==2会导致TypeScript给出错误Operator '==' cannot be applied to types '1' and '2'。TypeScript将这些值视为不同类型的原因是什么(不出所料,typeof运算符会说它们都是number)?这是一个专门应用于数字的设计决定,还是整个打字系统的副产品?允许字面量的比较会造成什么危害?

EN

回答 3

Stack Overflow用户

发布于 2017-08-31 19:35:08

在这种情况下,12被认为是所谓的文字数字。这意味着值1的类型为1,因此只能为1,与2相同。鉴于此,1==2的表达式没有意义,因为1永远不可能是2,或者更准确地说,它们的类型不匹配,您不能将苹果与橙子进行比较。

以下是默认情况下假设文本类型的基本原理和深入细节:

关于文字类型:

解释为什么文本类型很有用的众多示例之一:

票数 7
EN

Stack Overflow用户

发布于 2017-08-31 19:49:03

当TypeScript在表达式1上执行类型推断时,它会给它类型1,而不是number类型。如果你像这样检查代码,你会发现:

代码语言:javascript
复制
const a = 1;

如果您使用集成开发环境查询推断出的a类型,您将看到a的类型是1。例如,在TypeScript playground中,您会看到一个工具提示,上面写着const a: 1

因此在if (1 == 2)中,1的类型为1,而2的类型为2。TypeScript不允许您比较它们,因为它们属于不同的推断类型。这是TypeScript为您提供的类型安全的一部分。

您可以使用以下命令来解决此问题:

代码语言:javascript
复制
if (1 as number == 2) {
}

您在一条评论中提到,您之所以进行1 == 2比较,是因为编译器抱怨无法访问代码而无法执行if (false) { ... }。我可以用下面的代码来解决这个问题:

代码语言:javascript
复制
if (false as boolean) {
    console.log("something");
}
票数 5
EN

Stack Overflow用户

发布于 2017-08-31 19:45:02

Typescript可以从任何常量值创建类型。当与联合类型结合使用时,这将创建一种非常强大的方式来表达函数作为参数的内容,例如:

代码语言:javascript
复制
function doStuff(p : "yes"| 1| true| "no"| 0| false ){

}

doStuff("maybe"); //Error
doStuff(3); // Error
doStuff(1) ; //OK

您正在经历一个不幸的副作用:像您这样的错误不是被报告为expression is always false,而是转变为类型兼容性错误。

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

https://stackoverflow.com/questions/45980370

复制
相关文章

相似问题

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