dev.to | 📄 原文链接 | 2026-11-07 收录

TypeScript 的 const enum 被弃用:该换成什么,编译团队为何下这个判断

来源:dev.to — 2026-11-06

📋 概述

const enum 承诺零运行时开销,代价是它依赖跨文件信息来完成内联,而 esbuild、swc、Vite 这类现代工具都是按模块独立编译。库在 .d.ts 里声明 const enum 就变成地雷:使用方根据声明快照把值内联进产物,而库自身构建时 const 修饰符已经把枚举对象抹掉了,运行时那个对象根本不存在。一旦版本漂移更糟:编译时按 1.2 版把 Status.Active 内联成 5,运行时加载的是把它改成 7 的 1.3 版,条件判断静默走错分支,数据被悄悄写坏。isolatedModules 选项正是为捕捉这类只适用于全程序编译的模式而存在,而它明确与 ambient const enum 不兼容。

🔑 核心要点

💡 金句

“A const enum in a library's .d.ts file becomes a landmine: the consuming project inlines values at compile time but ships code that expects those enum objects to exist at runtime.”
译:库的 .d.ts 里的 const enum 会变成地雷:使用方在编译期内联了值,却发布了运行时指望这些枚举对象存在的代码。
← 返回 dev.to 首页