TS系列(4): let和const是如何工作的?

本篇是「一起学习TypeScript 」系列的第4篇,接下来笔者将持续深耕,不定时更新一系列精彩纷呈的TypeScript文章,旨在解答使用TypeScript过程中的各种疑难杂症,一起探索TS的无穷魅力!

【TS系列回顾】:

TS系列(1): React中能否使子组件实现"类型安全"?

TS系列(2): 使用泛型提升TS函数可重用性

TS系列(3): 什么情况下可以使用any?

众所周知,在TS中声明变量(let 或者const)的方式会影响它们是否可以更改。

一、TS如何推断let变量?

当我们使用let关键字声明变量时,变量是可变的且可以重新被赋值。

🌰假设,我们有1个代表唱片流派的类型AlbumGenre:

ts 复制代码
type AlbumGenre = "rock" | "country" | "electric"

现在,使用let声明一个变量albumGenre:

上述代码中,由于声明变量时使用的是let,TS知道该值稍后可以更改,它将albumGenre推断为string类型,而不是特定的文字类型"rock"。因为我们后续可以继续将albumGenre赋值,例如:

ts 复制代码
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声明变量,也尽量在声明时指定清楚该变量的类型哦😉

相关推荐
福兮说3 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
AI情绪识别开源4 小时前
HFpEF 心房-心室耦联效率无创监测方向(AVCEI)
typescript·laravel·perl
郑州光合科技余经理4 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6665 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
凤城老人5 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Dovis(誓平步青云)5 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan5 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_6 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒6 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技6 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端