TypeScript 开发必备工具库 utility-types,帮你省一半类型代码
TypeScript 开发必备工具库 utility-types,帮你省一半类型代码
piotrwitek/utility-types 是 GitHub 上的 TypeScript 工具类型集合,目前 Star 数 5759。它的定位是补充 TypeScript 内置的映射类型和别名,相当于类型层面的 Lodash,帮开发者避免在不同项目间重复编写常用工具类型。

核心能力覆盖绝大多数类型操作场景
utility-types 提供的类型工具可以分为几大类:
- 基础类型别名与类型守卫,比如 Primitive、Falsy、Nullish 以及对应的 isPrimitive、isFalsy 等类型守卫函数
- 联合类型操作符,比如集合交集、差集、补集、对称差集等操作
- 对象类型操作符,支持提取对象中的函数键、非函数键、可修改键、只读键、必填键、可选键,以及对对象属性做深 Partial、深 Required、深 Readonly 等操作
- 特殊操作符,比如提取 Promise resolve 类型、给类型加品牌标识、联合类型转交叉类型等
- 兼容 Flow 的工具类型,方便开发者从 Flow 迁移到 TypeScript
所有类型都经过 dts-jest 测试,类型正确性有保障。整个库没有第三方依赖,所有功能都是纯类型层面实现,不会引入任何运行时代码,不会增加项目打包体积。
安装和使用门槛极低
安装方式就是标准的 npm 包安装:
npm install utility-types
或者用 yarn:
yarn add utility-types
版本兼容方面,v3.x 版本支持 TypeScript 3.1 以上,v2.x 版本支持 TypeScript 2.8.1 以上,v1.x 版本支持 TypeScript 2.7.2 以上,基本覆盖了目前绝大多数项目的 TypeScript 版本环境。
使用时只需要从包中导入需要的类型即可,比如要提取对象中类型为函数的键,直接导入 FunctionKeys 类型使用。要对嵌套对象做深只读,导入 DeepReadonly 类型使用即可。

适合人群和使用建议
如果你是 TypeScript 开发者,不管是做前端项目还是 Node.js 后端项目,都可以用这个库。特别是项目中存在大量自定义工具类型的场景,直接用 utility-types 可以省去大量重复代码,也能避免自己实现时可能出现的类型错误。
对于正在从 Flow 迁移到 TypeScript 的团队,utility-types 提供的 Flow 兼容工具类型,可以减少迁移过程中的类型适配工作量。
目前这个库的功能已经比较稳定,日常开发中常用的类型操作基本都有覆盖。如果有特殊的类型需求,也可以基于这个库的实现做扩展,或者直接提交 PR 到官方仓库。
要注意的是,utility-types 中的部分类型已经在新版 TypeScript 中内置,比如 Omit、ReturnType、InstanceType 等,使用时可以优先用内置版本,不需要额外导入。
浙公网安备 33010602011771号