더북(TheBook)

Promise<Awaited<string>>은 왜 Promise<string>이고, Awaited<Promise<Awaited<string>>>은 왜 string일까요? 알아봅시다. Awaited 타입은 다음과 같습니다. Promise 객체의 타입은 ES2015에서 선언되었는데, Awaited 타입은 더 예전 버전인 ES5에서 선언되었다는 점이 재미있습니다.

lib.es5.d.ts

type Awaited<T> =
  T extends null | undefined ? T :
    T extends object & { then(onfulfilled: infer F, ...args: infer _): any } ? 
      F extends ((value: infer V, ...args: infer _) => any) ? 
        Awaited<V> :
        never :
      T;

컨디셔널 타입이 세 번 중첩되어 나타나고 있습니다.

첫 번째 컨디셔널 타입은 Tnull이나 undefined인지 확인합니다. Awaited<null>null이고, Awaited<undefined>undefined입니다.

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