Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 创建从方法中提取返回值的泛型类型_Typescript - Fatal编程技术网

Typescript 创建从方法中提取返回值的泛型类型

Typescript 创建从方法中提取返回值的泛型类型,typescript,Typescript,这里我有一个类方法和一些简单的方法 class Methods { name = (): string => "bob" age = (): number => 42 asyncAge = async (): Promise<number> => 42 } type ThenArg=T扩展承诺?U:T 类型MethodReturns={ [K in M[number]]:C[K]扩展((…args:any[])=>any)?然后arg:ne

这里我有一个类
方法
和一些简单的方法

class Methods {
    name = (): string => "bob"
    age = (): number => 42
    asyncAge = async (): Promise<number> => 42
}
type ThenArg=T扩展承诺?U:T
类型MethodReturns={
[K in M[number]]:C[K]扩展((…args:any[])=>any)?然后arg:never
}

不确定是否不希望将该数组作为第二个泛型类型参数传递,但如果是这样,则可以执行以下操作:

type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;

type MethodReturns<Obj extends {}> = {
    [K in keyof Obj]: Obj[K] extends ((...args: any[]) => any)
        ? UnwrapPromise<ReturnType<Obj[K]>>
        : never;
};
type unapprovisie=T扩展承诺?U:T;
类型MethodReturns={
[K in keyof Obj]:Obj[K]扩展((…args:any[])=>any)
?展开批准
:从不;
};
// type x = { name: string } & { asyncAge: number } 
type ThenArg<T> = T extends Promise<infer U> ? U : T

type MethodReturns<C, M extends Array<keyof C>> = {
    [K in M[number]]: C[K] extends ((...args: any[]) => any) ? ThenArg<ReturnType<C[K]>> : never
}
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;

type MethodReturns<Obj extends {}> = {
    [K in keyof Obj]: Obj[K] extends ((...args: any[]) => any)
        ? UnwrapPromise<ReturnType<Obj[K]>>
        : never;
};