Awaited에 타입 인수로 제공한 타입은 object & { then(onfulfilled : infer F, ...args : infer _) : any를 extends합니다. 따라서 V가 string | number로 추론됩니다.
이는 실제 자바스크립트에서도 마찬가지입니다.
자바스크립트
(async () => {
const thenable = {
then(onfulfilled) {
setTimeout(() => onfulfilled(42), 10);
}
};
const v = await thenable; // 42
})();
// const v: number
thenable 객체는 Promise 인스턴스는 아니지만 await 연산자를 사용해 onfulfilled 함수의 인수를 반환할 수 있습니다. 자바스크립트와 타입스크립트 모두 구조적 타이핑을 적극 활용한다는 점을 기억하세요.