提问人:falinsky 提问时间:4/14/2020 最后编辑:falinsky 更新时间:10/7/2020 访问量:553
Typescript 文本类型和加法赋值运算符
Typescript literal types and addition assignment operators
问:
对于 的文字类型,无论我们使用常规加法运算符(例如)还是加法赋值运算符(例如):typescript
a = a + b
a += b
type SomeLiteralType = 1;
let a: SomeLiteralType = 1;
// Why is it possible to change the value of Literal type to unsupported value without any error?
a += 1;
// Now it's even not allowed to assign to itself - next error occurs: "Type 'number' is not assignable to type '1'"
a = a;
因此,最终使用加法赋值运算符,我们可以强制变量包含意外值。
字符串也会发生同样的情况。
这是预期的行为,并且我遗漏了文档中的某些内容吗?
答:
-2赞
WolverinDEV
4/14/2020
#1
1)和,相对于类型检查过程相等。
解释发生了什么可以在 中找到。c += b;
a += a;
4)
2)
编译器将此表达式解释如下: 赋值表达式: 左侧: 标记(运算符):
右侧:
为了检查两边的类型,编译器会扣除左右表达式的类型。
如果是左侧,它很简单。
对于右侧,它将是数字。
原因是所有数学运算符 (, , ...) 都只能使用数字(在 jJavaScript 中),因此结果也必须是 number 类型。
左边是扣除类型,右边是数字,你会得到你的错误。d = d + b;
d
=
d + b
+
-
Odd
3)
与上面一行相同的原因(e = a + a;
2)
)
4)这个表达式归结为以下几点: 赋值表达式:
左侧:
标记(运算符):
右侧:
由于我们从上面知道,所有数学运算符都只能应用于数字,
这应该是不言自明的。编译器检查左侧是否为数字,
以及右侧是否为数字。要么是数字,要么是数字,所以它有效。a += a;
a
+=
a
a
a
1
为什么最后一行有效现在应该很清楚了,我会把它留给你的家庭作业;)
评论
0赞
falinsky
4/14/2020
谢谢你的回答。我简化了代码示例以强调主要问题。
0赞
WolverinDEV
4/14/2020
好吧,可能会保留一些例子,否则我的回答中的很多内容似乎都断章取义;)
评论