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

相关推荐
曼巴UE51 小时前
UE FString, FName ,FText 三者转换,再次学习,官方文档理解
服务器·前端·javascript
行走的陀螺仪2 小时前
高级前端 Input 公共组件设计方案(Vue3 + TypeScript)
前端·javascript·typescript·vue·组件设计方案
一颗不甘坠落的流星2 小时前
【Antd】基于 Upload 组件,导入Json文件并转换为Json数据
前端·javascript·json
LYFlied2 小时前
Vue2 与 Vue3 虚拟DOM更新原理深度解析
前端·javascript·vue.js·虚拟dom
Lucky_Turtle3 小时前
【Node】npm install报错npm error Cannot read properties of null (reading ‘matches‘)
前端·npm·node.js
小飞侠在吗3 小时前
vue shallowRef 与 shallowReacitive
前端·javascript·vue.js
惜分飞3 小时前
sql server 事务日志备份异常恢复案例---惜分飞
前端·数据库·php
GISer_Jing4 小时前
WebGL实例化渲染:性能提升策略
前端·javascript·webgl
烟锁池塘柳04 小时前
【技术栈-前端】告别“转圈圈”:详解前端性能优化之“乐观 UI” (Optimistic UI)
前端·ui