lib.es5.d.ts
interface Promise<T> {
then<TResult1 = T, TResult2 = never>(
onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null
): Promise<TResult1 | TResult2>;
catch<TResult = never>(
onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null
): Promise<T | TResult>;
}
일단 Promise.resolve('hi')는 Promise<string> 타입입니다. T 타입 매개변수가 string인 것이죠. 이후에 then 2개와 catch 1개가 붙어 있으므로 하나씩 살펴보아야 합니다. 첫 번째 then 메서드의 반환값 타입부터 파악해보겠습니다.