Promise는 기존에 자바스크립트에 있는 객체이므로 따로 구현할 필요가 없습니다. 기존 Promise 값에 타입만 붙이고자 2.32절에서 배운 declare를 사용해서 타입을 선언한 것입니다.
PromiseConstructor 인터페이스가 실제 Promise 객체의 타입입니다. new를 붙여 호출할 수도 있고 all, race, reject, resolve 등의 메서드가 있다고 알려주고 있습니다.
여기서 다음 코드를 분석해봅시다. export {}는 top level await에서 에러가 발생하는 것을 막기 위해 추가했습니다.
const str1 = Promise.resolve('promise');
// const str1: Promise<string>
const str2 = await Promise.resolve('promise');
// const str2: string
export {};
str1은 resolve의 반환값이 Promise<Awaited<string>>입니다. str2는 str1에서 await이 붙었습니다. 타입스크립트에서 await이 붙으면 타입이 Awaited 제네릭 타입으로 감싸집니다. 따라서 str2는 Awaited<Promise<Awaited<string>>>입니다.