일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 5427번
- 정리
- 나이트의이동
- node.js
- 토마토
- 맥주마시면서걸어가기
- 123만들기
- 17626번
- javascript
- 14940번
- 16953번
- 백준
- 알고리즘
- 타입스크립트 프로그래밍
- 2503번
- 16439번
- 1926번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 5014번
- 7526번
- 타입스크립트
- 2422번
- 1541번
- 20365번
- 6593번
- 20300번
- 13913번
- 풀이
- 자바스크립트
- 1969번
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 |