十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ts-pattern 新手教程:如何用 match() 和 P 在 60 秒内匹配任意数据结构

ts-pattern 新手教程:如何用 match() 和 P 在 60 秒内匹配任意数据结构 ts-pattern 新手教程如何用 match() 和 P 在 60 秒内匹配任意数据结构【免费下载链接】ts-pattern The exhaustive Pattern Matching library for TypeScript, with smart type inference.项目地址: https://gitcode.com/gh_mirrors/ts/ts-patternts-pattern是 TypeScript 生态里一款开箱即用的模式匹配Pattern Matching库。它让你用match()和P两个 API就能以极少的代码安全地分支处理任何数据结构——对象、数组、元组、Set、Map 以及所有原始类型。相比if/else或switch它更短、更可读还能通过**穷举检查exhaustive**保证你不会漏掉任何分支。本文是一份面向新手和普通用户的入门指南带你快速上手几乎不需要深究类型细节。为什么需要 ts-pattern 模式匹配想象你要根据「状态 事件」组合决定下一步用switch就得写嵌套判断一旦漏了某个组合运行期才会爆 bug。模式匹配把条件描述和处理逻辑分离编译器替你把关。 核心卖点更短、更安全、不遗漏分支包体仅约 2kB。快速安装 ts-pattern在你的项目目录执行任意一条命令即可npm / pnpm / yarn / bun 均支持npm install ts-pattern安装后只需从包里导入两个名字match和P也可以叫Pattern。入口源码位于 src/index.ts。第一步认识 match() 与 .with()match(值)返回一个链式构建器你用.with(模式, 处理函数)逐个声明分支。命中第一个匹配的模式就执行对应处理函数并返回结果。import { match } from ts-pattern; const result match(text) .with(text, () 一段文字) .with(img, () 一张图片) .otherwise(() 未知类型);.otherwise()相当于switch的default用来兜底。match的完整实现见 src/match.ts。第二步用 P 通配符与 P.select 提取数据P提供了一组通配符和匹配器是库的灵魂P._匹配任意值P.string/P.number/P.boolean匹配对应类型P.select()从深层结构里抽取某个字段直接注入处理函数P.when(函数)加一个自定义判断守卫函数P.not(模式)匹配「除某个值之外的一切」import { match, P } from ts-pattern; const render (data: unknown) match(data) .with({ type: img, src: P.select() }, (src) img src${src}) .with({ type: text }, (v) p${v.content}/p) .otherwise(() );P.select()能省去手动解构特别适合嵌套很深的对象。所有模式定义都集中在 src/patterns.ts。第三步用 .exhaustive() 保证穷举.exhaustive()既执行表达式又启用穷举检查如果某个可能组合没被处理编译期就会报错。这让代码在持续演进中依然安全。match(input) .with(a, () 1) .with(b, () 2) .exhaustive(); // 漏掉 c 时会直接提示 NonExhaustiveError⚠️ 穷举检查会略微增加编译时间属于可选但推荐的安全开关。更多实用技巧多模式命中同一分支.with(text, span, p, () ...)任一命中即执行等价于switch的多case。强制返回类型.returnTypeState()让每个分支必须返回同一类型。类型守卫校验isMatching(模式, 值)判断某值是否符合形状常用于校验接口返回源码见 src/is-matching.ts。收窄类型.narrow()可深度排除已处理分支缩小后续类型范围。核心文件速览文件作用src/index.ts包入口导出match、P、isMatchingsrc/match.tsmatch链式匹配实现src/patterns.tsP通配符与匹配器集合src/is-matching.ts类型守卫校验函数README.md完整官方文档与示例想动手练习可参考测试目录 tests/ 里覆盖字符串、元组、集合、Map、穷举等场景的众多用例。新手常见问答问P和Pattern有什么区别答没有区别二者是同一对象的两种导入别名按喜好选用即可。问必须写.exhaustive()吗答不是必须。追求极致安全就加上不想承担额外编译时间可用.otherwise()兜底。问能匹配数组和嵌套对象吗答可以。用元组[a, b]、对象{ key: P.select() }、P.array(...)、P.map(...)等几乎覆盖所有数据结构。小结用match()描述「输入长什么样」用P精确提取与过滤再用.exhaustive()兜底安全——这三步就是 ts-pattern 的全部精髓。花一分钟装上之后你的条件分支会变得更短、更稳、更不怕遗漏。【免费下载链接】ts-pattern The exhaustive Pattern Matching library for TypeScript, with smart type inference.项目地址: https://gitcode.com/gh_mirrors/ts/ts-pattern创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表