/** * 获取函数的返回类型 */ export type ReturnType = T extends (...args: any[]) => infer P ? P : void; /** * 获取函数的参数类型 */ export type ParamType = T extends (...args: infer P) => any ? P : never; /** * 获取 Promise 的参数类型 */ export type PromiseType = T extends Promise ? P : T; /** * 类构造函数类型 */ export type Constructor = new (...args: any[]) => T; /** * 将联合类型变成交叉类型 */ export type UnionToIoF = (U extends any ? (k: (x: U) => void) => void : never) extends ((k: infer I) => void) ? I : never; /** * 返回联合类型中的最后一个类型 */ export type UnionPop = UnionToIoF extends (a: infer A) => void ? A : never; /** * 将类型 U prepend 进元组 T 中 */ export type Prepend = ((a: U, ...r: T) => void) extends (...r: infer R) => void ? R : never; /** * 联合类型 */ type UnionToTupleRecursively = { 1: Result; 0: UnionToTupleRecursively_, Result>; }[[Union] extends [never] ? 1 : 0]; type UnionToTupleRecursively_ = UnionToTupleRecursively, Prepend>; /** * 联合类型变成元组类型 */ export type UnionToTuple = UnionToTupleRecursively; export type SetFunctionKeys = { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]; export type SetOmitFunctions = Omit>; export type RemoveNeverProperties = { [K in keyof T as T[K] extends never ? never : K]: T[K]; }; export type AsyncReturnWithoutProperties = RemoveNeverProperties<{ [K in keyof T]: T[K] extends (...args: any[]) => any ? (T[K] extends (...args: any[]) => Promise ? T[K] : (...args: Parameters) => Promise>) : never; }>; export type UnwrapArray = T extends (infer U)[] ? U : never; export type IsAny = unknown extends T ? [T] extends [string] ? true : false : false; export {};