inflearn logo
강의

Course

Instructor

TypeScript in Bite-Sized Pieces

Promises and Generics

reject로 전달되는 값(거부 이유)의 타입과 타입 가드

4

pjh0528

3 asked

0

챕터: 프로미스와 제네릭

시간: 7분 55초 - 8분 5초

질문: reject로 전달되는 값의 타입은 선택적 매개변수이면서 any 타입인데, catch메서드의 콜백함수에서 어떻게 if문과 typeof를 통해 타입을 좁힐 수 있는건가요?

타입 가드를 통한 타입 좁히기는 unknown 타입을 대상으로 사용했던걸로 기억해서 혼동이 됩니다.

typescript

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

박준형님께서 질문하신 것처럼 Promisereject 이유는 catch 콜백에서 any 타입으로 전달되는 경우가 있습니다.

typeof를 이용한 타입 좁히기는 unknown에만 사용할 수 있는 것은 아닙니다. any 타입에도 다음과 같은 조건문을 작성할 수 있습니다.

promise.catch((reason) => {
  if (typeof reason === "string") {
    // 이 블록에서는 string처럼 사용 가능
    console.log(reason.toUpperCase());
  }
});

다만 중요한 차이가 있습니다.

  • unknown: 타입을 확인하거나 좁히기 전에는 값을 사용할 수 없음
  • any: 타입 확인 없이도 대부분의 작업을 허용함
  • typeof 조건문 내부에서는 TypeScript가 해당 값의 타입을 string, number 등으로 좁혀서 추론할 수 있음
  • 하지만 any는 타입 검사를 우회하므로, 타입 안정성 측면에서는 unknown보다 안전하지 않음

즉, any에도 타입 가드 문법을 사용할 수는 있지만, any 자체가 타입 검사를 느슨하게 만들기 때문에 가능하다면 unknown으로 받아 타입을 확인한 뒤 사용하는 것이 더 안전합니다.

관련해서 any 대신 unknown을 사용하는 기준과 차이를 설명한 기존 답변을 참고해 보시면 좋습니다.

또한 typeof와 같은 타입 가드를 통해 유니언 타입을 좁히는 과정은 아래 게시물에서도 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

리액트 타입스크립트 설정 시 에러

0

47

1

인덱스드 엑세스타입 실무질문

0

53

2

모든 ts파일이 컴파일 되지 않습니다.(해결됨.)

0

117

4

핸드북 light/dark mode 관련 이슈가 있는 것 같습니다.

0

75

1

제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.

0

80

2

적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>

0

83

2

outDir 옵션 추가 후 컴파일 오류 질문

0

199

1

호출 시그니처 질문

0

132

2

서로소 유니언 타입이 discriminated union과 동의어 인가요?

0

142

2

조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제

0

112

1

할인쿠폰 관련하여

0

236

2

프론트엔드에서의 인터페이스활용

0

150

2

안녕하세요 이정환님!

0

130

1

Node.js 설치에 관한 질문입니다.

0

140

2

함수 타입 호출 시그니처

0

99

1

35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?

0

110

2

인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?

0

170

4

마우스 호버 시 정보

0

142

2

vite으로 리액트 빌드하기를 업데이트해주세요.

1

125

2

타입가드를 만들어 사용하는 이유가 궁금합니다.

0

144

2

섹션 12가 너무 어려운데... 정상이겠죠..?

0

181

2

선생님.. 알고리즘도 강의해주시면안되나요

0

148

2

선생님은 어떻게 이런걸 아세요?

0

178

1

type: module

0

151

2