文章目录
前言
前不久,TypeScript 5.8 正式发布,带来了一个让人瞩目的新配置:--erasableSyntaxOnly。这个配置的核心作用是什么呢?简单来说,它只允许使用“可擦除语法”。如果开启了它,任何不可擦除语法的使用都会直接报错。比如,enum 就是典型的不可擦除语法,一旦在 tsconfig.json 中配置了 "erasableSyntaxOnly": true,再用 enum 就会直接给你标红。
那么,今天我们就从“可擦除语法”和“不可擦除语法”来聊聊--erasableSyntaxOnly和enum枚举
1. 什么是可擦除语法和不可擦除语法
可擦除语法简单来说,可擦除语法就是那种可以直接去掉的,只在编译的时候存在,不会生成额外运行时代码的语法。像 type、interface 这些就属于可擦除语法。
例如如下代码, 在编译完成后, 将不会在存在type、interface , 即擦除了该语法:

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

可以看到,enum 和带运行时逻辑的 namespace 在编译后并没有被“擦除”,而是生成了额外的 JavaScript 代码。这些代码会在运行时被解析和执行,增加了运行时的开销。
需要注意的如果namespace仅用于类型声明, 不包括任何运行时逻辑,那它就是可擦除的,比如:

此时仅包含类型的namespace

最低0.47元/天 解锁文章
1254

被折叠的 条评论
为什么被折叠?



