Skip to content

Latest commit

 

History

History
67 lines (53 loc) · 1.59 KB

File metadata and controls

67 lines (53 loc) · 1.59 KB

5. 프로미스와 제네릭

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 객체를 반환한다면 함수의 반환값 타입을 위해 다음과 같이 할 수 있음

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);
  });
}