使用ts-pattern时枚举匹配失效,原因是什么?
ts-pattern 模式匹配回调不执行的解决办法
问题核心:你只配置了匹配规则,但未触发匹配执行流程——ts-pattern 的 .with() 仅用于定义匹配条件和对应回调,必须调用 .run() 或 .exhaustive() 才会实际执行命中的回调逻辑。
修复方案一:简化匹配逻辑(推荐)
直接匹配枚举值本身,代码更简洁高效,同时添加执行方法:
enum PossibleSelections { EQUAL = 'equal', AVERAGE = 'average', LOWEST = 'lowest', CUSTOM = 'custom', } const handleOnSelect = (newSelection: PossibleSelections) => { match(newSelection) .with(PossibleSelections.CUSTOM, () => { // 编写你的custom分支逻辑 }) .with(PossibleSelections.AVERAGE, () => { // 编写你的average分支逻辑 }) .with(PossibleSelections.LOWEST, () => { // 编写你的lowest分支逻辑 }) .with(PossibleSelections.EQUAL, () => { // 编写你的equal分支逻辑 }) .exhaustive(); // 强制覆盖所有枚举值,TypeScript编译时会校验是否遗漏;也可使用.run() };
修复方案二:保留原对象匹配形式
如果坚持使用对象包裹的匹配方式,只需在链式末尾添加执行方法即可:
const handleOnSelect = (newSelection: PossibleSelections) => { match({ newSelection }) .with({ newSelection: PossibleSelections.CUSTOM }, () => { // 编写你的逻辑 }) .with({ newSelection: PossibleSelections.AVERAGE }, () => { // 编写你的逻辑 }) .with({ newSelection: PossibleSelections.LOWEST }, () => { // 编写你的逻辑 }) .with({ newSelection: PossibleSelections.EQUAL }, () => { // 编写你的逻辑 }) .run(); // 必须添加此方法触发执行 };
关键说明
.exhaustive()适合枚举场景:它会让 TypeScript 在编译时检查你是否覆盖了所有枚举值,避免遗漏分支;.run()是通用执行方法:找到第一个命中的匹配项并执行回调,若未命中则返回undefined。
内容的提问来源于stack exchange,提问作者jordan
相关产品推荐
相关产品推荐

