Awaited에서 T가 Promise이면 then의 첫 번째 매개변수인 F를 infer합니다.
Awaited<T>의 일부분
F extends ((value: infer V, ...args: infer _) => any) ?
Awaited<V> :
never :
F가 infer되면 다시 F가 ((value: infer V, ...args: infer _) => any)를 extends하는지 확인하고, extends한다면 첫 번째 매개변수 V를 infer합니다. 왜 연달아 두 번 infer하는지 이해하기 어려울 수 있는데, 실제 코드 예시를 보면 쉽습니다.
Promise.resolve('hi')
.then((data) => {
data;
})
// (parameter) data: string
Promise.resolve('hi')는 Promise<string> 타입입니다. Promise 인스턴스이므로 then 메서드를 호출할 수 있죠. then의 첫 번째 매개변수 타입이 F입니다. F는 (data) => { data; }의 타입이죠. 다시 F의 첫 번째 매개변수 타입은 V입니다. V는 data의 타입입니다.