文章目录TypeScript类型工具里的lodash200类型体操一站搞定TypeScript类型工具里的lodash200类型体操一站搞定ts-toolbelt 在 GitHub 上获得了 7,141 个 Starts-toolbelt 包含超过 200 个类型工具函数。它在 TypeScript 类型体操领域的角色类似于 lodash 在 JavaScript 运行时工具函数领域的地位。lodash 操作运行时的值ts-toolbelt 操作编译时的类型。所有 TypeScript 项目都会用到类型操作。标准库自带的 Partial、Required、Pick、Omit 等内置类型在日常开发中能覆盖一部分场景。一旦遇到嵌套的对象映射、多层条件分支、联合类型的交并补运算就需要另想办法。过去遇到这些情况开发者只能手写映射类型、条件类型和递归类型。写出正确的类型体操往往需要反复调试。ts-toolbelt 把这些操作封装成了可复用的 API开发者不需要从零开始写类型逻辑。按模块组织覆盖 TypeScript 核心概念ts-toolbelt 按照 TypeScript 的类型体系划分子模块Any处理任意类型的工具如 Await提取 Promise 内的类型、Cast类型断言、Compute展开交叉类型、Equals判断类型相等、Try安全执行类型操作Object对象类型操作集合如 Merge合并对象、Diff找出差异键、Optional将指定键变为可选、Required将指定键变为必填、Filter按条件筛选键、Path按路径获取值类型List元组类型操作集合如 Append/Prepend在首尾追加元素、Concat拼接元组、Reverse反转顺序、Drop/Take截取子集、Zip按位置合并两个元组Function函数类型操作如 Curry柯里化、Compose/Pipe函数组合、Parameters提取参数类型、Return提取返回值类型、NoInfer阻止类型推断String字符串字面量类型操作如 Join拼接、Split分割、Replace替换、Length获取长度、At获取指定位置字符Number数字字面量类型的数学运算如 Add、Sub、Greater、Range生成数字范围、Negate取反Union联合类型的运算如 Diff差集、Filter筛选、IntersectOf转交叉类型、NonNullable去除 null 和 undefinedBoolean布尔类型的逻辑运算And、Or、Not、Xor项目给每个工具类型都配有文档页面说明用法和参数同时附带可运行的代码示例。安装npminstalltypescript^4.1.0 --save-devnpminstallts-toolbelt--save建议在 tsconfig.json 中开启{compilerOptions:{strictNullChecks:true,strict:true,lib:[es2015]}}strictNullChecks 是部分工具的前置依赖建议一并开启。使用示例导入方式有三种按模块名显式导入import{Object,List,Union}fromts-toolbelt短名导入每个模块用一个字母import{O,L,U}fromts-toolbelt单入口导入importtbfromts-toolbelt对象类型操作import{Object}fromts-toolbelt// 合并两个对象类型typeuserObject.Merge{name:string},{age?:number}// {name: string, age?: number}// 将指定键变为可选typepartialUserObject.Optional{id:number,name:string},name// {id: number, name?: string}// 递归提取路径typepathsObject.Paths{user:{name:string;age:number}}// user | user.name | user.age数字类型运算import{Number}fromts-toolbelttypesumNumber.Add1,30// 31typediffNumber.Sub10,3// 7typecmpNumber.Greater5,3// 1 (true)元组操作import{List}fromts-toolbelttyperevList.Reverse[1,2,3]// [3, 2, 1]typehdList.Head[a,b,c]// atypetlList.Tail[a,b,c]// [b, c]内置类型测试框架ts-toolbelt 的 Test 模块可以在编译阶段验证类型结果的正确性不需要实际运行代码import{Number,Test}fromts-toolbeltconst{checks,check}Testchecks([checkNumber.Add1,30,31,Test.Pass(),checkNumber.Add5,-3,2,Test.Pass(),])把这段代码放入不会被实际执行的 .ts 文件中TypeScript 编译时会自动完成类型校验。如果类型不匹配编译器会直接报错。版本策略ts-toolbelt 的主版本号跟随 TypeScript 大版本升级。当前 v9.x.x 对应 TypeScript 4.1.x 及以上版本。TypeScript 发生破坏性变更时ts-toolbelt 会同步发布新的主版本其余情况沿用语义化版本号。文档与社区项目提供在线文档每个工具类型都有对应页面。过往每个大版本的文档也做了存档。使用过程中遇到问题可以到 Discussions 提问社区欢迎新手和资深开发者参与讨论。项目还开放了 Community API允许社区贡献和发布不属于标准 API 范畴的类型工具。文档与社区项目提供在线文档每个工具类型都有对应页面。过往每个大版本的文档也做了存档。使用过程中遇到问题可以到 Discussions 提问社区欢迎新手和资深开发者参与讨论。项目还开放了 Community API允许社区贡献和发布不属于标准 API 范畴的类型工具。