평점 : ★★★★☆ 4.5

요즘 추세가 프레임워크를 가리지 않고 타입스크립트를 사용하는 경우가 많아지고 있고, 리액트와 타입스크립트를 사용하여 조그마한 프로젝트를 하게되어서 구매하였습니다.

일단 타입스크립트 관련 국내 서적이 몇 권 없습니다. 타입스크립트 검색을 통해 서적들을 살펴보면 몇 권 있는 책들도 Angular에 관련된 책들이고 Angular를 사용하기 위한 내용 정도로만 소개되어 있어, Typescript를 공부하기 위한 책으로는 적합하지 않았습니다.

사실 책이 600페이지가 넘지만, 자바스크립트 배경지식이 조금 있으면 보는데 오래 걸리지 않습니다.
일단 이 책의 장점은 타입스크립트 관련 서적중에 타입스크립트에 대해서 이정도로 자세히 집필 된 책은 없습니다.
그리고 자바스크립트 배경지식이 있으면, 타입스크립트 개발을 하는것은 어렵지 않지만 React, Vue에 타입스크립트를 결합하는 환경 세팅이나 tsconfig.json에서 입맛에 맞게 세팅을 하는 작업이 처음에는 조금 시간이 걸렸습니다.

이 책에서 가장 좋았던 부분이 tsconfig.json에서 환경설정을 하는것에 대해 굉장히 자세하게 설명을 해주었습니다. 책 가장 뒷부분에는 tsconfig.json에 옵션별로 설명을 모두 기재해 주어서 영어문서에 대해 익숙하지 않은 분들이 보시면 좋습니다.

단점으로는 너무 자세히 책을 집필 하려다 보니 밑에 책 목차를 보시면 아시겠지만, Typescript 만큼 ES6에 대한 내용이 전부 들어가 있습니다. (물론 Typescript가 ES6를 기본적으로 포함하고 있기는 하지만…) 그래서 바꿔 말하면, ES6 에 익숙하신 분들은 스킵하면서 읽으시면 금방 읽으실 수 있습니다.

그리고 문법에 대한 내용은 충분하지만, 타입스크립트를 활용한 간단한 ToDoList 예제라도 있었으면 더 좋았을 것 같습니다. 물론 온라인에 프레임워크에서 사용하는 예제라던가, 간단한 예제는 많으니 찾아보시면 될거 같습니다.
최근에 쓰여진 책이라서 비교적(?) 최신 버전으로 집필 되었으니 꼭 한번 보시는걸 추천드립니다.(최신 버전 3.5)

목차

1장 타입스크립트 소개
1.1. ECMA스크립트와 타입스크립트
1.1.1. ECMA스크립트의 역사
1.1.2. ECMA스크립트를 지원하는 타입스크립트
1.2. 타입스크립트 개요
1.2.1. 타입스크립트의 특징
1.2.2. 타입스크립트의 도구 지원
1.2.3. 타입스크립트의 역사
1.2.4. 타입스크립트의 아키텍처
1.2.5. 타입스크립트 컴파일러
1.2.6. 타입스크립트와 다른 언어 간 비교
1.2.7. 타입 시스템 간 비교
1.3. 타입스크립트의 생태계
1.3.1. 타입스크립트의 인기
1.3.2. 타입스크립트 기반 프레임워크

2장 개발 환경 구축
2.1. 타입스크립트 설치
2.1.1. Node.js 소개와 설치
2.1.2. NPM의 이해
2.1.3. NPM을 이용한 타입스크립트 설치와 업데이트
2.2. 타입스크립트 실행과 프로젝트 구성
2.2.1. Hello TypeScript! 출력
2.2.2. tsc 명령어와 컴파일 옵션
2.2.3. tsconfig.json 파일을 이용한 컴파일
2.2.4. ts-node 모듈을 이용한 컴파일과 실행
2.3. 타입스크립트의 개발 도구
2.3.1. VSCode 소개
2.3.2. VSCode의 설치
2.3.3. VSCode의 사용자 인터페이스
2.3.4. 태스크러너 설정
2.3.5. 타입스크립트의 확장 기능

3장 변수 선언과 기본 타입
3.1. 변수 선언
3.1.1. var 선언자의 특징
3.1.2. let 선언자의 특징
3.1.3. 상수 선언
3.2. 타입 검사와 타입 선언
3.2.1. 점진적 타입 검사
3.2.2. 자바스크립트의 동적 타이핑
3.2.3. 타입 계층도
3.2.4. 변수에 타입 지정
3.3. 자바스크립트의 타입
3.3.1. 자바스크립트의 내장 타입
3.3.2. symbol 타입
3.3.3. enum 타입
3.4. 타입스크립트의 내장 타입
3.4.1. any 타입
3.4.2. 배열 타입과 제네릭 배열 타입
3.4.3. 튜플 타입
3.4.4. void, null, undefined

4장 제어문
4.1. 조건문의 타입 제약과 폴스루
4.1.1. if 문 사용 시 타입 제약
4.1.2. switch 문과 폴스루
4.2. 반복문의 다양한 사용법
4.2.1. for 문과 이터러블 객체
4.2.2. while 문과 do-while 문

5장 연산자
5.1. 기본 연산자
5.1.1. 산술 연산자
5.1.2. 비교, 논리, 조건 연산자
5.2. 디스트럭처링
5.2.1. 객체 디스트럭처링
5.2.2. 배열 디스트럭처링
5.3. 전개 연산자
5.3.1. 전개 연산자를 이용한 배열 요소 확장
5.3.2. 전개 연산자를 이용한 객체 요소 확장

6장 함수
6.1. 타입스크립트 함수 사용
6.1.1. 자바스크립트 함수
6.1.2. 타입 안전성을 갖춘 타입스크립트 함수
6.2. 매개변수의 활용
6.2.1. 기본 초기화 매개변수
6.2.2. 나머지 매개변수
6.2.3. 선택 매개변수
6.2.4. 함수 오버로드
6.3. 익명 함수의 이해와 활용
6.3.1. 익명 함수와 화살표 함수
6.3.2. 익명 함수의 함수 타입
6.3.3. 콜백 함수의 타입 선언과 활용

7장 클래스와 인터페이스
7.1. 객체지향 프로그래밍과 클래스 기초
7.1.1. 타입스크립트의 객체지향 프로그래밍 지원
7.1.2. 클래스 선언과 객체 생성
7.1.3. 상속 관계와 포함 관계
7.1.4. 접근 제한자의 사용법
7.1.5. 추상 클래스를 이용한 공통 기능 정의
7.2. 인터페이스에 대한 이해
7.2.1. 인터페이스 소개
7.2.2. 인터페이스의 역할과 컴파일 결과 분석
7.2.3. 클래스를 배열 요소 타입으로 지정함
7.2.4. 인터페이스를 배열 타입으로 지정함
7.2.5. 인터페이스에 함수 타입을 정의하기
7.3. 클래스와 인터페이스의 활용
7.3.1. 오버라이딩으로 메서드를 재정의하기
7.3.2. 오버로딩을 구현하는 여러 방법
7.3.3. 클래스와 인터페이스 기반의 다형성 구현하기
7.3.4. 클래스에서 getter와 setter
7.3.5. 정적 변수와 정적 메서드
7.3.6. readonly 제한자의 활용

8장 모듈
8.1. 모듈에 대한 이해
8.1.1. 모듈에 대한 이해와 필요성
8.1.2. 내부 모듈과 외부 모듈
8.2. 네임스페이스
8.2.1. 네임스페이스에 대한 이해
8.2.2. 한 파일에 여러 네임스페이스 선언하기
8.2.3. 네임스페이스 하나를 여러 파일에 선언하기
8.2.4. 네임스페이스 모듈
8.2.5. 네임스페이스의 이름 확장
8.2.6. 브라우저에서 네임스페이스의 모듈 호출
8.3. 모듈의 이해와 사용
8.3.1. 모듈 선언과 모듈 임포트
8.3.2. 모듈을 개별적으로 노출하고 사용하기
8.3.3. 여러 모듈을 함께 export하기
8.3.4. 모듈을 재노출해 사용하기
8.3.5. 디폴트 모듈의 이해와 사용법
8.4. 모듈 시스템
8.4.1. 모듈 로더와 모듈 형식
8.4.2. 모듈 형식에 맞춰 컴파일하기
8.4.3. 특정 모듈 형식을 실행하기 위한 준비
8.5. 각종 모듈 형식에 대한 소개
8.5.1. ES2015 모듈 형식
8.5.2. CommonJS 모듈 형식
8.5.3. AMD 모듈 형식
8.5.4. UMD 모듈 형식
8.5.5. SystemJS 모듈 형식

09 고급 타입
9.1. 유니언 타입과 타입 가드
9.1.1. 유니언 타입
9.1.2. 타입 가드
9.2. 알아두면 쓸모 있는 고급 타입들
9.2.1. 문자열 리터럴 타입
9.2.2. 룩업 타입
9.2.3. non-nullable 타입
9.2.4. 네버 타입
9.2.5. this 타입

10장 타입 선언과 변경, 타입 호환
10.1. 타입 선언과 변경
10.1.1. 타입 에일리어스
10.1.2. 타입 추론
10.1.3. 타입 캐스팅, 변환, 어설션
10.2. 타입 호환
10.2.1. 프로그래밍 언어의 타입 시스템
10.2.2. 덕 타이핑
10.2.3. 구조 타이핑
10.2.4. 구조 서브타이핑
10.2.5. 명목 타이핑

11장 제네릭
11.1. 제네릭 소개
11.1.1. any로 타입을 느슨하게 만들기
11.1.2. 제네릭 소개
11.2. 제네릭 함수
11.2.1. 제네릭 함수 선언
11.2.2. 타입 매개변수의 확장
11.3. 제네릭 클래스와 인터페이스
11.3.1. 제네릭 클래스 선언
11.3.2. 타입 매개변수에 인터페이스를 상속하기
11.4. 제네릭의 여러 활용 방법
11.4.1. 룩업 타입을 제네릭 클래스에 적용
11.4.2. 인터페이스를 상속해 제네릭 확장하기
11.4.3. 맵 객체의 선언과 타입 지정 방법
11.4.4. 제네릭 기반의 자료구조 만들기

12장 비동기 처리
12.1. 프로미스를 이용한 제어 흐름 개선
12.1.1. 비동기 호출 시 중첩 스코프의 문제
12.1.2. 프로미스 소개와 동작 과정
12.1.3. 타입스크립트에서 프로미스 컴파일 방법
12.1.4. 프로미스를 사용한 중첩 스코프 개선
12.1.5. 프로미스의 비동기 호출 제어
12.2. RxJS를 활용한 데이터 스트림 처리
12.2.1. 반응형 프로그래밍
12.2.2. RxJS 소개와 설치
12.2.3. 데이터 스트림과 연산자에 대한 이해
12.2.4. RxJS 연산자를 활용한 데이터 스트림 처리
12.3. 동시성을 활용한 비동기 호출 제어
12.3.1. 동시성과 동기화 작업
12.3.2. Async/Await 소개와 설정
12.3.3. Async/Await를 이용한 동기화

13장 서드 파티 라이브러리와 타입 정의 파일
13.1. 서드 파티 라이브러리
13.1.1. 타입스크립트의 서드 파티 라이브러리
13.1.2. 타입 정의 파일에 대한 저장소
13.2. 라이브러리와 타입 정의 파일 설치하기
13.2.1. 타이핑을 이용한 타입 정의 파일 설치(1.x 버전)
13.2.2. 패키지로 내려받아 타입 정의 파일 설치(2.x 버전)
13.3. 타입 정의 파일
13.3.1. 타입 정의 파일 소개
13.3.2. 타입 정의 파일 작성 시 앰비언트 선언
13.3.3. 자바스크립트 라이브러리 호출
13.3.4. 라이브러리 호출 시 d.ts 파일 사용
13.3.5. 타입스크립트의 네이티브 d.ts 파일

14장 프로젝트 구성과 번들링
14.1. 타입스크립트 프로젝트의 번들링
14.1.1. 번들러를 이용한 번들링
14.1.2. 웹팩을 이용한 번들링 작업
14.1.3. 웹팩 설정 파일을 이용한 번들링
14.1.4. 타입스크립트 로더 설정과 웹팩 실행
14.2. 라이브러리에 기반한 프로젝트 구성
14.2.1. jQuery 기반 프로젝트의 구성과 실습
14.2.2. AngularJS 기반 프로젝트의 구성과 실습
14.2.3. 스타터킷과 CLI

15장 북마크 애플리케이션 개발
15.1. 타입스크립트만으로 서버와 클라이언트를 동시에 개발하기
15.1.1. 동형 타입스크립트
15.1.2. 북마크 애플리케이션 소개
15.2. 프로젝트 구성과 공통 API 정의
15.2.1. 프로젝트 디렉터리의 구조
15.2.2. 프로젝트 관련 패키지 설치와 설정
15.3. 프로젝트에서 사용할 기본 서버 개발
15.3.1. Node.js 기반의 서버 개발
15.3.2. 라우팅 처리 클래스의 개발
15.4. 타입스크립트를 이용한 클라이언트 개발
15.4.1. 북마크 애플리케이션의 화면 개발
15.4.2. 북마크 애플리케이션의 메인 로직 개발
15.4.3. 웹팩을 이용한 북마크 애플리케이션 번들링
15.5. 타입스크립트를 이용한 서버 개발
15.5.1. MVC 모델
15.5.2. 모델 클래스의 개발
15.5.3. 컨트롤러 클래스의 개발
15.5.4. 정적 파일이 담길 디렉터리와 뷰 엔진 설정
15.5.5. 응답 시 사용할 뷰 템플릿 정의
15.6. 그런트를 이용한 자동 컴파일 환경 구축
15.6.1. 태스크 러너를 이용해 단위 작업을 자동화하기
15.6.2. 그런트 설치와 태스크 패키지 설치
15.6.3. 그런트 설정 파일에 웹팩 작업을 등록
15.6.4. 그런트 설정 파일에 타입스크립트 컴파일 작업 등록
15.6.5. 그런트 설정 파일에 파일 복사 작업 등록
15.6.6. 그런트 설정 파일에 동시성 설정
15.6.7. 그런트 설정 파일에 감시 작업 등록
15.6.8. 브라우저 동기화 작업 설정
15.6.9. 북마크 애플리케이션의 실행 결과 확인

16장 테스팅
16.1. 테스팅에 대한 전반적인 소개
16.1.1. 테스팅의 필요성
16.1.2. TDD와 단위 테스팅
16.1.3. BDD와 BDD 테스팅
16.2. 테스트 환경 구축
16.2.1. 테스트에 필요한 패키지 설치
16.2.2. 모카의 TDD와 BDD 스타일에 대한 이해
16.2.3. 걸프를 이용한 테스트 환경 구축
16.3. 테스트 실습
16.3.1. 클래스 모듈에 대한 테스트
16.3.2. 네임스페이스를 고려한 테스트
16.3.3. DOM 테스트

부록 _ 타입스크립트 컴파일 옵션