[TS] 프로미스와 제네릭

TIL

프로미스의 타입 추론

Promise 객체를 생성하고 3초 후 20을 반환하는 코드를 작성해보자.

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(20);
  }, 3000);
});

promise.then((response) => {
  console.log(response);
});

 

Promise는 resolve로 전달하는 결과값의 타입을 자동으로 추론하지 못하고 unknown 타입으로 추론한다.

 

resolve 타입 지정

타입 변수에 타입을 지정하면 resolve 결과값의 타입이 정확히 추론된다.

 

reject와 에러처리

Promise의 catch 메서드에서 에러 매개변수는 항상 any 타입으로 추론된다.

 

그리고 타입 변수로 에러 타입을 지정할 수 없기 때문에, 타입 좁히기로 안전하게 처리하는 것이 권장된다.

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

 

 

프로미스 반환 함수 타입 정의

게시글을 불러오는 함수를 작성해보자.

interface Post {
  id: number;
  title: string;
  content: string;
}

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

함수가 Promise를 반환할 때 타입을 정의하는 방법은 두 가지가 있다.

방법 1: Promise 생성자에 타입 지정

function fetchPost() {
  return new Promise<Post>((resolve, reject) => {
    // ...
  });
}

 

방법 2: 함수 반환 타입 명시

함수 선언부에서 반환 타입을 명시하는 방법이 더 직관적이다.

function fetchPost(): Promise<Post> {
  return new Promise((resolve, reject) => {
    // ...
  });
}

함수 첫 줄에서 반환 타입을 확인할 수 있어 협업 시 권장되는 방식이다.

'TIL' 카테고리의 다른 글

[CS50] 컴퓨팅 사고 - 정보의 표현  (0) 2025.11.04
[TS] 제네릭 함수 타입 정의 및 응용 연습  (0) 2025.11.04
[TS] 제네릭 클래스  (0) 2025.11.04
[TS] 제네릭 인터페이스와 타입 별칭  (0) 2025.11.04
[TS] map, forEach 메서드 타입 정의하기  (0) 2025.11.04
'TIL' 카테고리의 다른 글
  • [CS50] 컴퓨팅 사고 - 정보의 표현
  • [TS] 제네릭 함수 타입 정의 및 응용 연습
  • [TS] 제네릭 클래스
  • [TS] 제네릭 인터페이스와 타입 별칭
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    memory
    함수 타입
    인터페이스
    타입 좁히기
    트러블 슈팅
    알고리즘
    react
    App Router
    Trouble Shooting
    C
    페이지 라우터
    Pages Router
    typescript
    Next.js
    cs50
    배열
    자료구조
    emotion diary
    바닐라 자바스크립트
    algorithm
    앱 라우터
    문자열
    클래스
    useState
    generic
    ai 감성 일기장
    CS
    Spa
    javascript
    제네릭
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[TS] 프로미스와 제네릭
상단으로

티스토리툴바