더북(TheBook)

두 번째 컨디셔널 타입은 Tobject & { then(onfulfilled : infer F, ...args : infer _) : anyextends하는지 확인합니다. Tstring, boolean, number의 경우는 object가 아니므로 false입니다. Awaited<string>string, Awaited<boolean>boolean, Awaited<number>number입니다. 이것을 규칙 1번이라고 하겠습니다. 규칙 1번에 의해 str1의 타입인 Promise<Awaited<string>>Promise<string>이 됩니다.

규칙 1번: Awaited<객체가 아닌 값> === 객체가 아닌 값

T가 객체인 경우에도 추가로 { then(onfulfilled: infer F, ...args: infer _) : any를 만족해야 합니다. then이라는 메서드를 가지고 있어야 하는데 대표적으로 Promise 인스턴스가 then 메서드를 갖고 있습니다. 여기서 말하는 Promise 인스턴스는 Promise 객체와 다릅니다. Promise.resolve에서의 PromisePromise 객체이고, new Promise()Promise.resolve()의 반환값은 Promise 인스턴스입니다.

Promise 인스턴스의 타입은 다음과 같이 따로 타이핑되어 있으며, Awaited 타입과 마찬가지로 ES5에서 선언되었습니다.

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