如何从Promise <T>中提取T

时间:2019-10-10 14:33:07

标签: typescript

我有一个用后续返回类型声明异步函数的用例:

async function getNumber() {
  const {number} = await API_getNumber();

  return number;
}

export type Return = ReturnType<typeof getNumber>

这里ReturnPromise<number>。然后,我需要使用此返回类型,但不知何故只能从中获取number位,即没有前途。这可能吗?

1 个答案:

答案 0 :(得分:3)

2种方法:

    function promiseOne() {
      return Promise.resolve(1)
    }

    const promisedOne = promiseOne()

    type ThenArg<T> = T extends Promise<infer U> ? U : T

    type PromiseOneThenArg = ThenArg<typeof promisedOne> // => number

2:

function promiseOne() {
  return Promise.resolve(1)
}

type ThenArg<T> = T extends Promise<infer U> ? U :
  T extends (...args: any[]) => Promise<infer U> ? U :
  T

type PromiseOneThenArg = ThenArg<typeof promiseOne> // => number

来源:How to Unwrap Type of a Promise