Typescript工具类型

TypeScript 工具类型(Utility Types) 是官方内置的一组泛型类型,用来在类型系统里做"类型变换"。它们通常基于泛型、映射类型、条件类型来封装常见的类型操作。

我给你整理一个比较系统的清单,分为常用、对象操作、集合操作和特殊工具几类:


🌟 常用工具类型

工具类型 说明 示例
Partial<T> 将 T 的所有属性变为可选 {a: number, b: string} → {a?: number, b?: string}
Required<T> 将 T 的所有属性变为必填 {a?: number} → {a: number}
Readonly<T> 将 T 的所有属性设为只读 {a: number} → {readonly a: number}
Record<K,T> 构造一个以联合类型 K 为键、T 为值的对象类型 `Record<'a'
Pick<T,K> 从类型 T 中挑选属性 K `Pick<User, 'id'
Omit<T,K> 从类型 T 中剔除属性 K Omit<User, 'password'>

🔑 对象属性相关

| 工具类型 | 说明 | 示例 |
|------------------|-------------------------|-----------------------|-------------------|
| Extract<T,U> | 提取 T 中可赋值给 U 的部分 | `Extract<'a' |
| Exclude<T,U> | 从 T 中剔除可赋值给 U 的部分 | `Exclude<'a' |
| NonNullable<T> | 去掉 null 和 undefined | `NonNullable<string | null>→string` |


📚 函数相关

工具类型 说明 示例
Parameters<T> 获取函数参数类型的元组 (a: string, b: number) => void → [string, number]
ReturnType<T> 获取函数返回值类型 () => Promise<number> → Promise<number>
ConstructorParameters<T> 获取构造函数参数类型 new (s: string) => Person → [string]
InstanceType<T> 获取构造函数实例类型 InstanceType<typeof Person> → Person

🛠️ 其他特殊工具

工具类型 说明 示例
ThisParameterType<T> 提取函数 this 的类型 (this: Person, name: string) => void → Person
OmitThisParameter<T> 去掉函数的 this 参数 (this: Person, name: string) => void → (name: string) => void
ThisType<T> 在对象字面量里指定 this 的类型(配合 --noImplicitThis) { a: string, b(): void }
Awaited<T> 获取 Promise 的值类型(TS 4.5 新增) Awaited<Promise<string>> → string

🔍 示例演示

typescript 复制代码
interface User {
  id: number;
  name: string;
  age?: number;
}

// Partial
type UserPartial = Partial<User>;
// { id?: number; name?: string; age?: number; }

// Omit
type UserWithoutAge = Omit<User, 'age'>;
// { id: number; name: string; }

// Parameters
function greet(name: string, age: number) {}
type GreetParams = Parameters<typeof greet>;
// [string, number]

// ReturnType
type GreetReturn = ReturnType<typeof greet>;
// void

相关推荐
hkNaruto10 分钟前
【AI】基于大模型的AI游戏地图生成、控制方案:AI Native Game Harness 迁移操作手册
前端·人工智能·游戏
IT_陈寒20 分钟前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
Acro35 分钟前
快给macOS 上的Grok Bot换一套皮肤
前端
flash俊杰38 分钟前
双引擎 OCR 编排:逐页判定、视觉优先、partial 语义与三层超时
前端
计算机魔术师38 分钟前
Reddit 每周被 Google 偷走 100 万次点击,CEO 摊牌了
前端
前端繁华如梦39 分钟前
用 React Three Fiber 做一栋能编辑的教学楼数字孪生
前端
前端繁华如梦44 分钟前
用 React Three Fiber 做一套智慧医院数字孪生:编辑器、大屏和 BIM 浏览器
前端
俊昭喜喜里2 小时前
理解全局跨域CORS配置
前端
二哈赛车手3 小时前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript
锋行天下5 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端