【问题标题】:How to extract T from Promise<T>如何从 Promise<T> 中提取 T
【发布时间】:2019-10-10 22:38:56
【问题描述】:

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

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

  return number;
}

export type Return = ReturnType<typeof getNumber>

这里ReturnPromise&lt;number&gt;。然后我需要使用这个返回类型,但不知何故只能从中得到number 位,即没有承诺。这可以吗?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      相关资源
      最近更新 更多