泛型工具类型是 TypeScript 内置的预定义泛型类型,专门用于类型操作与类型转换。借助这些工具类型,无需重复编写复杂类型逻辑,即可快速处理属性修改、类型筛选、对象结构定义等场景,大幅提升类型代码的简洁性和可维护性。
Partial<T>:创建一个新类型,将类型 T 中的所有属性转换为可选属性。 常用场景:对象更新、表单编辑、部分属性赋值。
interface User {
name: string;
age: number;
}
// 将 User 的所有属性变为可选
type PartialUser = Partial<User>;
// 等价于:{ name?: string; age?: number; }
// 赋值时可只传部分属性
const user: PartialUser = { name: "John" };Required<T>:与 Partial 相反,创建一个新类型,将类型 T 中的所有属性转换为必选属性。
interface User {
name?: string;
age?: number;
}
// 将所有可选属性变为必选
type RequiredUser = Required<User>;
// 等价于:{ name: string; age: number; }Readonly<T>:创建一个新类型,将类型 T 中的所有属性转换为只读属性,赋值后无法修改。 常用场景:常量配置、不可变数据。
interface User {
name: string;
age: number;
}
// 将所有属性变为只读
type ReadonlyUser = Readonly<User>;
// 等价于:{ readonly name: string; readonly age: number; }
const user: ReadonlyUser = { name: "John", age: 20 };
// user.age = 21; // 报错:只读属性无法修改Pick<T, K>:从类型 T 中选取指定的属性集合 K,创建一个新类型。 常用场景:从复杂类型中提取需要的部分属性。
interface User {
name: string;
age: number;
email: string;
}
// 从 User 中选取 name 和 email 两个属性
type UserProfile = Pick<User, 'name' | 'email'>;
// 等价于:{ name: string; email: string; }
const user: UserProfile = {
name: 'John Doe',
email: 'john@example.com',
};Omit<T, K>:与 Pick 相反,从类型 T 中剔除指定的属性集合 K,保留剩余属性。
interface User {
name: string;
age: number;
email: string;
}
// 剔除 age 属性,保留剩余属性
type UserWithoutAge = Omit<User, 'age'>;
// 等价于:{ name: string; email: string; }Exclude<T, U>:从联合类型 T 中,排除所有可以赋值给 U 的类型,保留剩余类型。
type T = 'a' | 'b' | 'c';
type U = 'a' | 'd';
// 排除类型 a,保留 b、c
type ExcludeType = Exclude<T, U>; // 'b' | 'c'Extract<T, U>:从联合类型 T 中,提取所有可以赋值给 U 的类型,与 Exclude 互为相反操作。
type T = 'a' | 'b' | 'c';
type U = 'a' | 'd';
// 提取公共类型 a
type ExtractType = Extract<T, U>; // 'a'Record<K, T>:快速定义一个键值对对象类型,K 为属性名类型,T 为属性值类型。 常用场景:定义字典、映射表、对象集合。
type User = {
name: string;
age: number;
};
// 定义键为字符串、值为 User 类型的对象
type UserRecord = Record<string, User>;
// 等价于:{ [key: string]: User; }
const userRecord: UserRecord = {
user1: { name: "镜流", age: 18 },
user2: { name: "刃", age: 20 },
};ReturnType<T>:提取函数类型 T 的返回值类型。
const getUser = () => {
return { name: "John", age: 20 };
};
// 获取函数的返回值类型
type UserReturnType = ReturnType<typeof getUser>;
// 等价于:{ name: string; age: number; }Parameters<T>:提取函数类型 T 的参数类型,返回一个元组类型。
const add = (a: number, b: string) => `${a}${b}`;
// 获取函数的参数类型元组
type AddParams = Parameters<typeof add>; // [number, string]属性操作类:Partial(可选)、Required(必选)、Readonly(只读)、Pick(选取)、Omit(剔除);
类型筛选类:Exclude(排除)、Extract(提取);
结构定义类:Record(键值对)、ReturnType(返回值)、Parameters(参数);
核心价值:内置工具类型封装了通用类型逻辑,是 TypeScript 工程化开发中简化类型定义的必备工具。