Typescript工具类型

140 阅读2分钟

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 中剔除属性 KOmit<User, 'password'>

🔑 对象属性相关

工具类型说明示例
Extract<T,U>提取 T 中可赋值给 U 的部分`Extract<'a'
Exclude<T,U>T 中剔除可赋值给 U 的部分`Exclude<'a'
NonNullable<T>去掉 nullundefined`NonNullable<stringnull>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) => voidPerson
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

🔍 示例演示

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