◆結論
declare global { type AwaitType<T> = T extends Promise<infer U> ? U : T extends (...args: Array<any>) => Promise<infer V> ? V : T; }
◆お気持ち
ReturnTypeっていうビルトインのtypeを使えば、「関数の戻り値の型」を引っ張ってこれますよね。
const hoge = (arg: number) => 'ちばけんま!'; type t = ReturnType<typeof hoge>; // t のtypeは、hogeの戻り値の型であるstringになる。
それと同じノリで、関数の戻り値がPromiseであったらそれawaitした結果の型が欲しすぎない?喉から胃液が出るほど欲しい。