더북(TheBook)

PromiseLikePromise 인스턴스의 타입에서 catch 메서드만 제외하고 동일합니다. 따라서 ((value: T) => TResult1 | PromiseLike<TResult1>) 중에서 onfulfilled 함수의 타입은 (value: T) => TResult1이고, onfulfilled의 반환값은 123입니다. 따라서 반환값의 타입인 TResult1 | PromiseLike<TResult1>)에서 TResult1number가 됩니다. 123Promise가 아니니까요.

then 메서드의 반환값은 Promise<TResult1 | TResult2>이므로 Promise<number | never>이고, 최종적으로 Promise<number>가 됩니다.

const chaining = await Promise.resolve('hi')
  .then(() => {
    return 123;
  })
  .then(() => {
    return true;
  })
// const chaining: boolean
...

두 번째 then이 붙을 때는 Promise<number>에 대해 TResult1true일 것이므로 Promise<TResult | TResult2>Promise<boolean>이 됩니다.

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