用途
TypeScript Utility Types 是一份关于 TypeScript 类型系统的技能资料,目标是帮助开发者掌握内置工具类型、映射类型、条件类型和高级类型操作技巧,从而编写灵活且类型安全的 TypeScript 代码。当需要处理 TypeScript 工具类型、映射类型和高级类型操作,或构建灵活的类型安全代码时可参考使用。
主要能力
内置工具类型
- Partial 与 Required:Partial 使所有属性变为可选,Required 使所有属性变为必填。示例展示了用 Partial 实现 updateUser 的局部更新,用 Required 校验配置对象。
- Pick 与 Omit:Pick 选取指定属性(如 ArticlePreview),Omit 移除指定属性(如 ArticleWithoutDates),两者可组合使用。
- Readonly 与 Record:Readonly 使属性只读,并给出 DeepReadonly 的递归写法;Record 用指定键和值类型创建对象类型,如 RolePermissions、RouteHandlers。
- Extract 与 Exclude:按条件筛选或排除联合类型成员,如从 Status 中提取 CompletedStatus、排除得到 ActiveStatus,并可按判别属性筛选 Shape 联合。
- ReturnType 与 Parameters:提取函数返回类型和参数元组,支持泛型函数(如 processData<User>)。
映射类型
- 基础映射:Flags(全部转为 boolean)、Nullable(全部可空)、Getters(全部转为函数)。
- 修饰符:-readonly 移除只读、-? 移除可选、+? 添加可选。
- 高级映射:Promisify、Boxed、Proxy 等属性类型转换。
条件类型
- 基础条件类型 T extends U ? X : Y,以及嵌套条件判断类型名。
- 分布式条件类型及其非分布式写法(用元组包裹)。
- 使用 infer 推断返回类型、数组元素类型、Promise 解包类型、首个参数类型等。
模板字面量类型
- 基础模板字面量与联合展开(如 ColoredQuantity、事件名 onClick)。
- 字符串操作类型:Uppercase、Lowercase、Capitalize、Uncapitalize,并组合生成 getter/setter 名称与访问器类型。
- 模式匹配:从路由字符串提取参数(ExtractRouteParams)、将 CSS 属性名转为驼峰(CamelCase)。
键重映射
- 按类型过滤键(OmitByType、PickByType)。
- 为键添加前缀(Prefix)。
- 按类型重命名键(RenameByType)。
高级类型操作
- 递归类型(JSONValue、Path、DeepPartial)。
- 联合与交叉类型工具(UnionToIntersection、RequiredKeys、OptionalKeys)。
- 函数类型工具(Asyncify、Curry)。
- 类型安全的构建器模式(Builder)。
类型推断辅助与类型守卫
- const 断言将数组/对象推断为字面量类型。
- 用户自定义类型守卫(isString、isUser)以及泛型类型守卫工厂 hasProperty。
使用方式
资料以类型定义与代码片段形式呈现,可直接作为编写 TypeScript 类型工具时的参考模式,按需复制并调整其中的类型别名、条件判断与映射逻辑。
适用场景
适用于需要设计可复用类型工具、约束函数输入输出、从联合类型中筛选成员、解析字符串模式为类型、构建类型安全的 API 与配置对象等 TypeScript 类型建模场景。
限制
资料仅覆盖类型层面的写法与示例,未说明运行环境版本要求、与具体框架的集成方式及性能影响;最佳实践部分内容在提供的资料中未完整给出。