| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 16439번
- 5427번
- 백준
- 7526번
- javascript
- 타입스크립트
- 2503번
- 17626번
- 맥주마시면서걸어가기
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 나이트의이동
- 풀이
- node.js
- 5014번
- 20300번
- 16953번
- 타입스크립트 프로그래밍
- 20365번
- 13913번
- 토마토
- 2422번
- 1541번
- 알고리즘
- 자바스크립트
- 정리
- 1969번
- 14940번
- 123만들기
- 1926번
- 6593번
Archives
- Today
- Total
Sqsung DevLog
<타입스크립트 프로그래밍> 7장: 에러 처리 - 정리 본문
7장: 에러 처리
"이번 장에서는 타입스크립트에서 에러를 표현하고 처리하는 가장 일반적인 패턴 네 가지를 소개한다"
7-1. null 반환
- 타입 안전성을 유지하면서 에러를 처리하는 가장 간단한 방법은 null을 반환하는 것이다
- 하지만 이런 경우 문제의 원인을 파악하고 어렵고, 조합이 어려워진다. 모든 연산에서 null을 학인해야 하므로 연산을 중첩하거나 연결할 때 코드가 지저분해진다
7-2. 예외 던지기
null을 반환하는 것보다 예외를 던지는 게 더 좋다
어떤 문제인지에 따라 대처가 가능할 수 있고, 디버깅에 도움되는 메타데이터를 얻을 수 있다
function parse(birthday: string): Date { let date = new Date(birthday); if (!isValid(date)) { throw new RangeError('Enter a dae in the form of YYYY/MM/DD'); } return date; }다른 헝태의 RangeError를 던질 수 있게 하려면 에러를 서브클래싱하여 더 구체적으로 표현하면 된다
class InvalidDateFormatError extends RangeError { }; class DateIsInTheFutureError extends RangeError { };
7-3. 예외 반환
타입스크립트는 throws문을 지원하지 않지만 유니온 타입을 이용해 비슷하게 흉내낼 수 있다
function parse(birthday: string): Date | InvalidDateFormatError | DateIsInTheFutureError { let date = new Date(birthday); if (!isValid(date)) { return new InvalidDateFormatError('Enter a date in the form YYYY/MM/DD'); } if (date.getTime() > Date.now()) { return new DateIsInTheFutureError('Are you a timelord (ㅋㅋ)'); } return date; }이제
parse메서드의 사용자는 모든 세 가지 상황 (InvalidDateFormatError, DateIsInTheFutureError, 파싱 성공)을 처리해야 하며 그렇지 않으면 컴파일 타임에 TypeError가 발생한다
7-4. Option 타입
특수 목적 데이터 타입을 사용해 예외를 표현하는 방법도 있다
- 단점: 이런 데이터 타입을 사용하지 않는 다른 코드와는 호환되지 않음
- 장점: 여러 연산을 연쇄적으로 수행할 수 있게 됨
가장 많이 사용되는 세 가지로는
Try,Option,Either타입들이 있으며, 자바스크립트에서 기본으로 제공되는 않으므로 해당 타입들을 사용하기 위해서는 NPM에서 찾아서 설치하거나 직접 구현해야 한다Option타입은 특정 값을 반환하는 대신, 값을 포함하거나 포함하지 않는 컨테이너를 반환하는 것이 핵심이다function parse(birthday: string): Date[] { let date = new Date(birthday); if (!isValid(date)) return []; else return [date]; } const birthday = parse('1994/03/30'); birthday.map(_ => _.toISOString()).forEach(_ => console.info('Date is', _));null 반환 방법처럼 Option 방식도 에러가 발생한 이유에 대해서는 알려주지 않는다 (단지 무언가 잘못됐음을 알려줌). 하지만 위 예제처럼 있을 수도 있고, 없을 수도 있는
birthday값에 여러 동작을 연쇄적으로 수행할 때 Option의 진가가 발휘된다
'TypeScript' 카테고리의 다른 글
| <타입스크립트 프로그래밍> 8장: 비동기 프로그래밍, 동시성과 병렬성 정리 (0) | 2023.06.16 |
|---|---|
| 타입스크립트 interface와 type의 차이점 정리 (0) | 2023.06.08 |
| <타입스크립트 프로그래밍> 6장: 고급 타입 - 정리 (0) | 2023.06.01 |
| <타입스크립트 프로그래밍> 5장: 클래스와 인터페이스 정리 (0) | 2023.05.29 |
| <타입스크립트 프로그래밍> 4장: 함수 (0) | 2023.05.27 |