더북(TheBook)

Awaited에서 TPromise이면 then의 첫 번째 매개변수인 Finfer합니다.

Awaited<T>의 일부분

      F extends ((value: infer V, ...args: infer _) => any) ? 
        Awaited<V> :
        never :

Finfer되면 다시 F((value: infer V, ...args: infer _) => any)extends하는지 확인하고, extends한다면 첫 번째 매개변수 Vinfer합니다. 왜 연달아 두 번 infer하는지 이해하기 어려울 수 있는데, 실제 코드 예시를 보면 쉽습니다.

Promise.resolve('hi')
  .then((data) => {
    data;
  })
// (parameter) data: string

Promise.resolve('hi')Promise<string> 타입입니다. Promise 인스턴스이므로 then 메서드를 호출할 수 있죠. then의 첫 번째 매개변수 타입이 F입니다. F(data) => { data; }의 타입이죠. 다시 F의 첫 번째 매개변수 타입은 V입니다. Vdata의 타입입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.