Skip to content

工具类型

1. 核心必会(占日常开发 80%)

这几个是你写业务逻辑时,几乎每天都要敲的“神技”。

工具类型逻辑功能场景举例
Partial<T>将所有属性变为可选更新用户信息时(只传改动的部分属性)
Required<T>将所有属性变为必填确保配置对象经过初始化,所有项都存在
Readonly<T>将所有属性变为只读防止配置项或常量对象在运行期间被修改
Pick<T, K>从 T 中精选出 K 属性列表页只需要用户对象的idname
Omit<T, K>从 T 中剔除掉 K 属性创建表单时,需要原对象除id以外的所有字段
Record<K, T>定义键值对映射字典对象、配置表(如Record<string, Category>

2. 进阶必备(处理函数与异步)

当你开始封装公共组件、高阶函数或处理 API 请求时,这几个是避不开的。

工具类型逻辑功能场景举例
ReturnType<T>获取函数返回值的类型自动获取一个复杂 API 请求函数返回的数据结构
Parameters<T>获取函数参数的类型想要拦截某个函数,并原封不动地转发它的参数
Promise<T>表示异步操作的结果async函数的标准返回类型
Awaited<T>解包 Promise,获取最终结果递归获取 Promise 里的resolve类型

3. 逻辑运算类(处理联合类型)

这类工具主要用于处理类似 type Status = 'success' | 'error' | 'loading' 这样的联合类型。

工具类型逻辑功能场景举例
Exclude<T, U>从 T 中排除掉可以赋值给 U 的类型从状态中排除 'error'
Extract<T, U>从 T 中提取出可以赋值给 U 的类型从一堆混合类型中只要string
NonNullable<T>排除掉nullundefined确保数据绝对安全,不会导致“空指针”

4. 字符串模板类(TS 4.1+ 魔法)

这是比较现代的 TS 特性,用于处理字符串类型的格式。

  • Uppercase<S>: 转大写
  • Lowercase<S>: 转小写
  • Capitalize<S>: 首字母大写
  • Uncapitalize<S>: 首字母小写

5. “避坑”建议

  1. 组合拳胜过单打独斗: 你可以嵌套使用。例如:Readonly<Partial<User>> 会得到一个“属性全可选且不可修改”的对象。
  2. Pick vs Omit 的选择
    • 如果属性很少,用 Pick(白名单思维,更安全)。
    • 如果属性很多,只想扔掉一两个,用 Omit(黑名单思维)。
    • 坑: 当原类型增加新属性时,Omit 会自动包含新属性,而 Pick 不会。在涉及敏感数据时,首选 Pick
  3. 不要尝试记住全部: 大多数时候,你只需要记得“有一个工具可以把属性变可选”就行了。遇到需求时,回来查一下这张表。