← 中文资源

简体中文版本

将字符串枚举重构为字面量联合类型

用字符串字面量联合替换运行时枚举,在边界收窄,并用 never 检查穷尽性使缺案编译失败。

阅读英文原文

抹除枚举,保留类型

字符串枚举在运行时发射反向映射对象。字面量联合编译为空。用联合替换枚举,包体积缩小。

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 消费者仍需默认分支。