抹除枚举,保留类型
字符串枚举在运行时发射反向映射对象。字面量联合编译为空。用联合替换枚举,包体积缩小。
type Status = 'pending' | 'active' | 'archived';
让编译器检查穷尽
每个 switch 加 never 默认分支。联合新增值时,缺案的 switch 编译失败,精确指向需补处。
function label(s: Status) {
switch (s) {
case 'pending': return 'Pending';
case 'active': return 'Active';
case 'archived': return 'Archived';
default: const _: never = s; return _;
}
}
预期结果
运行时包中枚举消失,每个 switch 穷尽,新增状态在所有 case 补齐前编译失败。网络来的值经断言联合的 schema 解析,未知值在边界被拒。联合无运行时存在,依赖 Object.values(Enum) 的代码需另建 const 数组;穷尽检查仅在 TypeScript 生效,JS 消费者仍需默认分支。