TS系列(4): let和const是如何工作的?
本篇是「一起学习TypeScript」系列的第4篇,接下来笔者将持续深耕,不定时更新一系列精彩纷呈的TypeScript文章,旨在解答使用TypeScript过程中的各种疑难杂症,一起探索TS的无穷魅力!
【TS系列回顾】:
众所周知,在TS中声明变量(let
或者const
)的方式会影响它们是否可以更改。
一、TS如何推断let变量?
当我们使用let
关键字声明变量时,变量是可变的且可以重新被赋值。
🌰假设,我们有1个代表唱片流派的类型AlbumGenre
:
type AlbumGenre = "rock" | "country" | "electric"
现在,使用let
声明一个变量albumGenre
:
上述代码中,由于声明变量时使用的是let
,TS知道该值稍后可以更改,它将albumGenre
推断为string
类型,而不是特定的文字类型"rock"
。因为我们后续可以继续将albumGenre
赋值,例如:
albumGenre = "country"
所以,当我们使用let
声明时,TS会推断出更宽的类型以容纳你后续会重新分配的变量!
那么,应该怎么修改呢?如下👇🏻所示,现在albumGenre
可以被重新赋值,并且只能赋AlbumGenre
集合里的值。此时,当我们调用handleGenre
就不再回飘红了:
二、TS如何推断const变量?
当我们使用const
关键字声明变量时,变量是不可变的,不可以重新被赋值!
相比于let
,TS在推断const
声明的变量时,类型会更窄:
此时,我们将鼠标悬停在albumGenre
上时,会发现TS已经将其推断为文字类型"rock"
如果你对const
变量进行重新赋值,会发现:
TypeScript模仿了JavaScript对const的处理,以防止可能的运行时错误。当你使用const声明变量时, TS 会将其推断为你指定的文字类型。
因此,我们可以得知TS利用了JS的工作原理来发挥其优势。这也提醒了我们,在声明变量时尽量使用const
而不是let
,因为const
在类型限制上更加严格!
如果,你不得不使用let
声明变量,也尽量在声明时指定清楚该变量的类型哦😉
转载自:https://juejin.cn/post/7355673413849661451