/** * 获取函数的返回类型 */ 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> // 0: UnionToTupleRecursively>, Prepend, Result>> }[[Union] extends [never] ? 1 : 0] type UnionToTupleRecursively_< Union, Element, Result extends any[] > = 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] } // 创建一个新接口类型 B,将 A 类型的方法转换为异步返回,屏蔽属性 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