告别 enum?探索 TypeScript 中的可擦除语法与替代方案

前言

前不久,TypeScript 5.8 正式发布,带来了一个让人瞩目的新配置:--erasableSyntaxOnly。这个配置的核心作用是什么呢?简单来说,它只允许使用“可擦除语法”。如果开启了它,任何不可擦除语法的使用都会直接报错。比如,enum 就是典型的不可擦除语法,一旦在 tsconfig.json 中配置了 "erasableSyntaxOnly": true,再用 enum 就会直接给你标红。

那么,今天我们就从“可擦除语法”和“不可擦除语法”来聊聊--erasableSyntaxOnlyenum枚举



1. 什么是可擦除语法和不可擦除语法

可擦除语法简单来说,可擦除语法就是那种可以直接去掉的,只在编译的时候存在,不会生成额外运行时代码的语法。像 typeinterface 这些就属于可擦除语法。

例如如下代码, 在编译完成后, 将不会在存在typeinterface , 即擦除了该语法:

可擦除语法的作用仅限于为开发者在编写代码时提供类型提示和约束

不可擦除语法,指的是那些在TypeScript 编译为 JavaScript 时,无法直接被“抹去”,而是会生成额外运行时代码的特性。这类语法不仅存在于编译阶段,还会在最终的 JavaScript 代码中保留,从而影响运行时的行为。典型的例子包括 enum 和带运行时逻辑的 namespace

举个例子:

可以看到,enum 和带运行时逻辑的 namespace 在编译后并没有被“擦除”,而是生成了额外的 JavaScript 代码。这些代码会在运行时被解析和执行,增加了运行时的开销。

需要注意的如果namespace仅用于类型声明, 不包括任何运行时逻辑,那它就是可擦除的,比如:

此时仅包含类型的namespace

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员付杰

欢迎投喂, 一起共享知识的盛宴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值