获取已解决的承诺的退货类型?

时间:2019-07-30 08:08:07

标签: typescript

我想创建一个具有一些默认值的变量,该变量是promise解析的返回类型的扩展接口。我的功能将是这样的:

function getAge(): Promise<number> {
  return new Promise((resolve) => {
  resolve(42)
  })
}

我的默认值变量为:

let user: { name: string, age: number } = { name: "", age: 0 }

我尝试使用ReturnType <>,但是当我只想返回数字时,我似乎只能得到返回类型Promise<number>

2 个答案:

答案 0 :(得分:1)

您可以使用条件类型来提取承诺的值类型:

function getAge(): Promise<{ name: string, age: number }> {
  return new Promise((resolve) => {
  resolve({ name: "", age: 42 })
  })
}

type UnboxPromise<T extends Promise<any>> = T extends Promise<infer U> ? U: never;

let user: UnboxPromise<ReturnType<typeof getAge>> = { name: "", age: 0 }

详细了解条件类型here

答案 1 :(得分:1)

我喜欢上面的答案('2021-03-28 16:00:00 Africa/Tunis'::timestamptz '2021-03-28 16:00:00 Europe/Berlin'::timestamptz 示例)。

或者,您可以定义一个类似于 ReturnType 的类型,只是将返回值作为一个 promise。

UnboxPromise

示例:

type ReturnPromiseType<T extends (...args: any) => Promise<any>> = T extends (...args: any) => Promise<infer R> ? R : any;

in Typescript Playground