TypeScriptでPromiseの型を知りたい

TypeScript で Promise の型を知りたい時、こうするとで型が取れます。

type ResolvedType<T> = T extends ((...args: any[]) => infer R)
  ? R extends Promise<infer S> ? S : R
  : T;

const res: ResolvedType<typeof fetch> = await fetch('/api/user');

解説

  • T が関数の時

    • TPromise に含まれているならば Promise(S)S を返す
    • 含まれていないならば T の返り値 R を返す
  • T が関数以外の時、T を返す