Typescript: 怎样拿到泛型函数的返回类型?

假设我有一个接口和一个泛型函数

interface SimpleRecord<T> { prop: T }

declare function foo<T>(): SimpleRecord<T>[]

如果别人的库没有导出SimpleRecord,我又想拿到foo<T>返回值的类型,对于一般的函数,可以这样做:

type ret = ReturnType<typeof console.log>

但是对于带了泛型的函数,这样做会出错:

type ret<T> = ReturnType<typeof foo<T>>
// [ts] 应为">"。

这样又会把泛型彻底丢掉:

type ret<T> = ReturnType<typeof foo>
declare const a: ret<number>
// a: SimpleRecord<{}>[]

除非这样:

const unused = foo<number>()
declare const a: typeof unused
// a: SimpleRecord<number>[]

但是会触发一次函数调用,如果foo有副作用就会玩脱。

所以请教一下,到底怎样才能实现type ret<T> = ReturnType<typeof foo<T>>

阅读 14.8k
2 个回答
新手上路,请多包涵
interface SimpleRecord<T> { prop: T }

type Foo<T> = () => SimpleRecord<T>[];

declare function foo<T>(): ReturnType<Foo<T>>;

let a: ReturnType<Foo<string>>;
//a: SimpleRecord<string>[]

不知道这是不是你想要的

declare function foo<T>():T[];

返回泛型?我觉得你问题描述有点混乱。
直接说你的输入,以及预期输出即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进