TS Pattern 穷尽匹配
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/kg20261476。
技能介绍
要解决的问题
TypeScript 项目里,判别联合(discriminated union)的状态分支往往越写越多:跟进状态要映射标签文案和颜色,表单保存要处理 idle/saving/success/error 四态,API 响应可能是 { type: 'ok' } 或 { type: 'err' } 的联合类型。手写 switch 时最隐蔽的 bug 不是逻辑写错,而是漏掉一个分支:新增了联合成员却忘了补 case,运行时直接掉进 default,状态悄悄变成了未知值。
核心能力
这个技能用 ts-pattern 的 match().exhaustive() 把这类问题交还给编译器:
- 穷尽性检查:
.exhaustive()会逐一比对联合的所有成员,漏掉分支直接编译报错,而不是运行时静默兜底。 - 长 switch 收敛:把模板里散落的超长
match抽成纯函数,如followStatusLabel、saveStateTip,让视图层保持干净。 - 新增状态的协作流程:先改类型定义,再由编译器驱动补全分支,
error态带message一并自测。 - 临时兜底:调试期可以用
.otherwise补一个分支,但核心业务态优先保证穷尽。
适用边界
- 不替代运行时校验:
ts-pattern只解决 TS 层面的穷尽性,API 入参仍需 Zod/Valibot 做 schema 校验,两者是互补而非替代。 - 二选一不必上库:分支少于三个的场景,原生
switch足够;分支 ≥3 或判别联合时收益最大。 - 不要吞掉未知状态:用
default兜底却不打日志,等于把编译期能发现的错误推迟到线上。 - 无类型收益不硬上:纯 JavaScript 项目引入本库拿不到任何穷尽检查的好处。
使用场景
- 跟进状态需要映射标签文案和颜色,用穷尽匹配避免漏掉新状态分支
- 表单保存需处理idle/saving/success/error四态,靠编译报错发现遗漏分支
- API响应为判别联合类型,用match处理ok和err分支确保类型安全
- 长switch逻辑散落模板,抽成纯函数让视图层保持干净可维护
适合人员
- 写TypeScript的前端工程师,需要编译器确保状态分支不遗漏
- 开发表单交互的全栈工程师,依赖穷尽检查避免保存态逻辑缺陷
- 维护组件库的开发者,要在多状态场景下保证类型安全与代码整洁
- 使用判别联合处理API响应的后端工程师,希望编译期捕获未处理分支