실무로 통하는 타입스크립트 - TypeScript Cookbook
이번 리뷰할 책은 "실무로 통하는 타입스크립트" 입니다.
저자 약력
오스트리아에 거주하는 개발자이자 건축가다. 『TypeScript in 50 Lessons』의 저자이며 인기 있는 타입스크립트 및 기술 블로그를 운영한다. 여가 시간에는 러스트 린츠 밋업과 유럽 타입스크립트 콘퍼런스 등을 주최한다. 이탈리아 음식, 벨기에 맥주, 영국 레코드판을 좋아한다. 또한 oida.dev에서 독립 컨설턴트이자 러스트 및 타입스크립트 강사로 활동하고 있다.
이 책은 저자가 출판한 이전 책 **"TypeScript in 50 Lessons"**의 후속작이라고 볼 수 있습니다.
재미있게도 부제가 **"105가지 오류 해방의 기술"**인데, 책을 보면 이 의미를 바로 파악할 수 있습니다.
각 장에서 설명하려는 타입스크립트 기능을 105개의 문제로 만들고 이를 위한 해결/논의를 제공해 독자에게 자연스럽게 인사이트를 주려고 한 흔적이 엿보입니다.
이런 식입니다.
책 소개
시작은 타입스크립트 기초 프로젝트 설정부터 들어갑니다.
타입스크립트를 사용하기 위한 tsconfig
에 대해 둘러보고, 다양한 유즈케이스와 프로젝트 설정 환경에 대비해 11가지의 문제를 제시하고 이를 어떻게 해결할 수 있는지 tsconfig
와 Definitely Typed 등을 이야기합니다.
이후 "2장 기본형"부터 본격적인 타입스크립트의 세계로 들어갑니다. 그리고 이후 React에서의 타입스크립트를 다룹니다.
책에서 배운 내용 중 제가 배우게 된 것들을 간단하게 정리해보았습니다.
- 형식 Annotation은 필요할 때만 지정한다. OOP에서는 일반적으로 모든 타입을 지정해주기에, 타입스크립트에서도 권장할 줄 알았으나 의외로 타입 추론을 하기 때문에 형식을 반드시 Type annotation을 사용해야 하는 경우에만 Annotation을 사용하고, 타입 추론을 사용하는 것을 권장합니다.
- 객체는
object
,Object
,{}
가 있는데, compound type은object
를, 그 외는{}
사용을 권장한다.{}
는Object
와 비슷합니다. - 타입과 인터페이스의 구분 프로젝트의 경계 내에서는 형식 별칭을, 다른 누군가가 소비해야 하는 형식에는 인터페이스를 사용합니다. 이는 OOP와 다른 흥미로운 점입니다. 과거에는 사용자 간의 논란이 많았던 부분인데, 타입과 인터페이스의 달랐던 부분이 일치하게 되면서 거의 차이가 없습니다.
하지만 인터페이스를 사용하면 중복된 interface 이름이 자동으로 확장이 되지만 type은 중복을 식별하여 오류를 발생시키기 때문에 외부 모듈 및 플러그인 때문에 발생할 문제를 피하기 위해 type 사용을 권장합니다.
더 자세한 내용은 여기에서 확인할 수 있습니다. - assertNever 함수를 사용한 완전 검사 방법 유니온 형식에 새 구성요소를 추가하는 경우 assertNever 함수를 사용하여 코드의 switch case 등에서 오류를 사전에 확인할 수 있습니다.
또한 SelectPartial
이나 Exclude
같은 원하는 형식으로 파싱이 가능한 헬퍼 타입들을 지원하고 있는데, 이 책에서 전반적으로 다뤄주고 있어서 많은 영감을 얻을 수 있었습니다.
이후 챕터에서는 형식 개발 전략을 다루며, 지금까지 소개한 타입스크립트의 특징과 기능을 총망라하여 실전에서 사용할 때 유지보수가 쉬운 TS 사용법을 이야기합니다. 이 책에서 이를 유지보수가 쉬운 형식(low maintenance type)이라고 소개하고 있는데, 실무에서 크게 도움이 되는 팁들의 총집편으로 제공됩니다.
인상적인 부분은 마지막 장의 **"언제 멈춰야 할지 알기"**입니다.
새로운 것을 알게 되면 그걸 쓰고 싶어 하고, 결국 필요 이상으로 더 복잡하게 만드는 경우가 많은데, 저자도 이를 의식한 건지 마지막에는 적절한 시기에 멈추는 방법과 생산성을 높이는 데 더 집중하는 해결 방식을 권장합니다.
저자는 독자가 이 책의 105가지 문제를 해결하며 얻은 통찰로 꼭 필요한 상황에 맞는 형식을 쓰기를 바라며, 느슨한 형식이 문제가 되는지 그리고 정제 과정을 거쳐야 언제든 쉽게 멈출 수 있다는 점을 얘기하며 책을 마무리합니다.
이 책에는 단 하나의 단점이 있는데 번역이 약간 아쉬운 편입니다. 예를 들면 10장 제목이 타입스크립트 및 반응인 것을 보고 Interaction인가? 했는데 React 라이브러리였습니다. 내용에서 바로 리액트라고 나오긴 합니다.
Promise를 실현, 거절이라고 번역한 것도 fulfill/reject을 의미합니다. 특정 용어들을 너무 한글화해버려서 예전과는 다르게 영어에 많이 익숙해진 실무 개발자들이 오히려 헷갈릴 수 있다는 생각이 듭니다. 물론 전부 이런 건 아니고 익스포트, 어서션 체크 등 영어를 그대로 번역한 것도 있고 그렇습니다.
마치며
- 2023년에 출판한 책이기 때문에 최신에 추가된 타입스크립트 확장 기능은 다루지 않습니다.
- OOP에 대한 경험이 있지만 TypeScript를 처음 접하는 분들에게도 이 책을 강력히 추천합니다. 앞으로 맞닥뜨리게 될 문제점들을 미리 트러블슈팅해볼 수 있기 때문입니다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."