typescript中有一个称为
ReturnType<TFunction>
它允许您推断特定函数的返回类型,如下所示
function arrayOf(item: string): string[] {
return [item]
}
但是,我在将它与泛型函数一起使用时遇到问题:
function arrayOf<T>(item: T): T[] {
return [item]
}
type R = ReturnType<typeof arrayOf> // R = {}[]
type R = ReturnType<typeof arrayOf<number>> // syntax error
// etc.
使用来自
Typescript ReturnType of generic function
,我已经试过了:(顺便说一句,这不是重复的,它不同于解决方案和问题适用于本案)
function arrayOf<T>(x: T): T[] {
return [x];
}
type GenericReturnType<R, X> = X extends (...args: any[]) => R ? R : never;
type N = GenericReturnType<number, <T>(item: T) => T[]>; // N = never
我还尝试了以下方法:
type GenericReturnType<TGenericParameter, TFunction> = TFunction extends (...args: any[]) => infer R ? R : never;
type N = GenericReturnType<number, <T>(item: T) => T[]>; // N = {}[]
以及
type GenericReturnType<TGenericParameter, TFunction> = TFunction extends <T>(...args: any[]) => infer R ? R : never;
type N = GenericReturnType<number, <T>(item: T) => T[]>; // N = {}[]
和
type GenericReturnType<TGenericParameter, TFunction> = TFunction extends <T extends TGenericParameter>(...args: any[]) => infer R ? R : never;
type N = GenericReturnType<number, <T>(item: T) => T[]>; // N = {}[]
还有这个
type GenericReturnType<TGenericParameter, TFunction> = TFunction extends (arg: TGenericParameter) => infer R ? R : never;
type N = GenericReturnType<number, <T>(item: T) => T[]>; // N = {}[]
还有这个
type GenericReturnType<TGenericParameter, TFunction> = TFunction extends <U extends TGenericParameter>(arg: U) => infer R ? R : never;
type N = GenericReturnType<number, <T>(item: T) => T[]>; // N = {}[]
以及
type x = (<T>(item: T) => T[]) extends <T>(arg: T) => infer R ? R : never // x = {}[]
最后
type x = (<T>(item: T) => T[]) extends (arg: number) => infer R ? R : never // x = {}[]
但没有一个能满足人们的需求
number[]
所以,我的问题是,有没有办法创造出类似于
ReturnType
在给定泛型参数类型的情况下,哪种方法适用于具有泛型参数的函数?(也就是上述问题的解决方案)