TypeScript-섹션7. 제네릭-프로미스와 제네릭(6)

손주완·2025년 7월 15일

Typescript Section7

목록 보기
6/6

선요약

  • Promise<T>는 제네릭 클래스로, resolve의 결과값 타입을 T로 설정할 수 있다.
  • reject의 값은 타입을 지정할 수 없으며, 기본적으로 unknown이다.
  • then() 메서드는 resolve 값을, catch() 메서드는 reject 값을 다룬다.
  • 함수의 반환 타입으로 Promise<타입>을 명시하여 비동기 작업의 결과 타입을 선언할 수 있다.

Promise 사용하기

Promise는 제네릭 클래스로 구현되어 있다. 따라서 새로운 Promise를 생성할 때 다음과 같이 타입 변수에 할당할 타입을 직접 설정해 주면 해당 타입이 바로 resolve 결과값의 타입이 됨.

const promise = new Promise<number>((resolve, reject) => {
  setTimeout(() => {
    // 결과값 : 20
    resolve(20);
  }, 3000);
});

promise.then((response) => {
  // response는 number 타입
  console.log(response);
});

promise.catch((error) => {
  if (typeof error === "string") {
    console.log(error);
  }
});

reject 함수에 전달된 값의 타입은 지정할 수 없고, 타입스크립트에서는 기본적으로 unknown으로 처리되므로, catch에서 타입 좁히기를 통해 안전하게 다뤄야 함.

함수에서 Promise 반환

어떤 함수가 Promise 객체를 반환한다면 함수의 반환 타입으로 Promise<타입>을 지정해야 함.

function fetchPost() {
  return new Promise<Post>((resolve, reject) => {
    setTimeout(() => {
      resolve({
        id: 1,
        title: "게시글 제목",
        content: "게시글 본문",
      });
    }, 3000);
  });
}

또는 더 명확하게 반환 타입을 다음과 같이 직접 명시해도 됨.

function fetchPost(): Promise<Post> {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({
        id: 1,
        title: "게시글 제목",
        content: "게시글 본문",
      });
    }, 3000);
  });
}

요약

  • Promise<T>는 비동기 작업의 성공 결과를 T로 선언할 수 있도록 해주는 제네릭 클래스이다.
  • reject() 결과값은 unknown으로 취급되므로 타입 확인이 필요하다.
  • 함수 반환 타입으로 Promise<타입>을 사용하면 타입 안정성이 높아진다.

0개의 댓글