더북(TheBook)

즉, TPromise 객체일 때 Awaited<T>Awaited<V>가 되는데 TPromise<X>이고, VX입니다. 따라서 Awaited<Promise<X>>Awaited<X>가 됩니다. 이것을 규칙 2번이라고 하겠습니다.

규칙 2번: Awaited<Promise<T>> === Awaited<T>

이제 분석하려는 코드를 다시 봅시다.

const str1 = Promise.resolve('promise');
// const str1: Promise<string>
const str2 = await Promise.resolve('promise');
// const str2: string
export {};

str2Awaited<Promise<Awaited<string>>> 타입입니다. 이 타입은 규칙 1번에 의해 Awaited<Promise<string>>이고, 이것은 규칙 2번에 의해 Awaited<string>입니다. 그리고 다시 규칙 1번에 의해 최종적으로 string이 됩니다.

이번에는 Promise.all 결과물의 타입이 어떻게 제대로 추론되는지를 분석해보겠습니다. 분석하려는 코드는 다음과 같습니다.

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