Typescript 文本类型和加法赋值运算符

Typescript literal types and addition assignment operators

提问人:falinsky 提问时间:4/14/2020 最后编辑:falinsky 更新时间:10/7/2020 访问量:553

问:

对于 的文字类型,无论我们使用常规加法运算符(例如)还是加法赋值运算符(例如):typescripta = a + ba += 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+=aaa1

为什么最后一行有效现在应该很清楚了,我会把它留给你的家庭作业;)

评论

0赞 falinsky 4/14/2020
谢谢你的回答。我简化了代码示例以强调主要问题。
0赞 WolverinDEV 4/14/2020
好吧,可能会保留一些例子,否则我的回答中的很多内容似乎都断章取义;)