TS类型操作工具汇总
TypeScript 提供了一套强大的类型操作工具,可以帮助我们创建复杂的类型系统
基础类型工具
Partial<T> :将所有属性变为可选
 
interface User {name: string;age: number;
}
type PartialUser = Partial<User>;  // { name?: string; age?: number; }Required<T>:将所有属性变为必需
 
type RequiredUser = Required<PartialUser>;  // 恢复为原始User类型Readonly<T>:将所有属性变为只读
 
type ReadonlyUser = Readonly<User>;结构操作工具
Pick<T, K>:选择部分属性
 
type NameOnly = Pick<User, 'name'>;  // { name: string }Omit<T, K>:排除部分属性
 
type WithoutAge = Omit<User, 'age'>;  // { name: string }Record<K, T>:创建键值类型
 
type UserMap = Record<string, User>;  // { [key: string]: User }联合类型工具
Exclude<T, U>:从T中排除U
 
type T = 'a' | 'b' | 'c';
type Result = Exclude<T, 'a'>;  // 'b' | 'c'Extract<T, U>:提取T中符合U的类型
 
type Result = Extract<T, 'a' | 'd'>;  // 'a'NonNullable<T>:排除null和undefined
 
type T = string | null | undefined;
type Result = NonNullable<T>;  // string函数类型工具
Parameters<T>:获取函数参数类型
 
type Fn = (a: number, b: string) => void;
type Params = Parameters<Fn>;  // [number, string]ReturnType<T>:获取函数返回值类型
 
type Ret = ReturnType<Fn>;  // voidConstructorParameters<T>:获取构造函数参数类型:
 
class C {constructor(a: number, b: string) {}
}
type CP = ConstructorParameters<typeof C>;  // [number, string]高级类型操作
条件类型
type IsString<T> = T extends string ? true : false;
type A = IsString<'hello'>;  // true
type B = IsString<123>;      // false映射类型
type Getters<T> = {[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
};
type UserGetters = Getters<User>;
// { getName: () => string; getAge: () => number; }模板字面量类型
type EventName = 'click' | 'scroll';
type HandlerName = `on${Capitalize<EventName>}`;
// "onClick" | "onScroll"实用工具类型
Awaited<T>:解开Promise类型
 
type P = Promise<string>;
type Res = Awaited<P>;  // stringThisParameterType<T>:获取函数的this参数类型
 
function f(this: { name: string }) {}
type This = ThisParameterType<typeof f>;  // { name: string }