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

相关推荐
灰小猿20 分钟前
Spring前后端分离项目时间格式转换问题全局配置解决
java·前端·后端·spring·spring cloud
im_AMBER35 分钟前
React 16
前端·笔记·学习·react.js·前端框架
02苏_36 分钟前
ES6模板字符串
前端·ecmascript·es6
excel39 分钟前
⚙️ 一次性警告机制的实现:warnOnce 源码深度解析
前端
excel41 分钟前
Vue SFC 样式编译核心机制详解:compileStyle 与 PostCSS 管线设计
前端
excel42 分钟前
🧩 使用 Babel + MagicString 实现动态重写 export default 的通用方案
前端
excel42 分钟前
Vue SFC 编译器主导出文件解析:模块组织与设计哲学
前端
excel1 小时前
深度解析:Vue SFC 模板编译器核心实现 (compileTemplate)
前端
excel1 小时前
Vue SFC 解析器源码深度解析:从结构设计到源码映射
前端
excel1 小时前
Vue SFC 编译全景总结:从源文件到运行时组件的完整链路
前端