1

I've got use case where async function is declared with followup return type:

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

  return number;
}

export type Return = ReturnType<typeof getNumber>

here Return is Promise<number>. I then need to use this return type, but somehow only get number bit from it i.e. without promise. Is this possible to do?

Ilja
  • 44,142
  • 92
  • 275
  • 498

1 Answers1

3

2 methods:

    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

Source: How to Unwrap Type of a Promise

yosh
  • 178
  • 15