TS类型实现

169 阅读1分钟

ts工具类

常用类型与实现

Partial将类型 T 的所有属性标记为可选属性

type Parital <T> = {
    [P in keyof T]? : T[P]
}

RequiredRequired 将类型 T 的所有属性标记为必选属性

type Required <T> = {
    [P in keyof T]-? : T[P]
}

ReadonlyRequired 将类型 T 的所有属性标记为只读属性

type Readonly <T> = {
    readonly [P in keyof T] : T[P]
}

Pick从某个类型中过滤出某个或某些属性,返回过滤出来的内容

// extends keyof 表示 泛型T的属性名 包含 泛型P
type Pick <T,P extends keyof T> = {
    [K in P] : T[K]
}

Omit从某个类型中剔除掉某个或某些属性,返回剔除后剩下的内容

type Omit<T, K extends keyof any> = {
    [P in Exclude<keyof T, K>] : T[P];
}
  1. Record标记key与value类型
// any 包含 string | number | symbol
## type Record <T extends keyof any, P > = {
    [K in T]:P
}

Exclude移除特定类型中的某个(些)属性

type Exclude<T,U> = T extends U ? never : T;
// 应用
type E1 = Exclude<keyof any, number | symbol>; // string类型

ExtractExclude 的反操作,取 T,U 两者的共有的属性

type Exclude<T,U> = T extends U ? T : never;
// 应用
type E2 = Exclude<keyof any, number | symbol>; //number|symbol类型

NonNullable排除类型 T 的 null | undefined 属性

type NonNullable <T> = T extends null | undefined ? never : T
type N = NoNullable<string|number|null|undefined> // string | number

ReturnType获取函数的返回类型

type ReturnType<T extends (...args: any[]) => any> = T extends (...args: any[]) => infer R ? R : any
function A (){
    return 123
}
type N = ReturnType<A>;

Parameters从函数类型的参数中使用的类型构造元组类型Type

type Parameters<T extends (...args: any) => any> = T extends (...args: infer A) => any ? [A] : never 

String的一些常用操作

  • 全部转为大写 UpperCase<T>
  • 全部转为小写 LowerCase<T>
  • 首字母大写 Capitalize<T>
  • 首字母小写 Uncapitalize<T>