개발/type-challenges

type-challenges를 통해 타입 시스템과 친해지기

JonghwanWon 2022. 7. 1. 17:12

type-challenges

TypeScript는 정적 타입을 지원하므로 컴파일 단계에서 잠재적인 버그를 피할 수 있는 장점이 있습니다.

또, 명시적인 정적 타입 지정은 개발자의 의도를 명확하게 기술할 수 있어 코드의 가독성을 높이고, 예측 가능하게 합니다.

이는 곧 프로젝트의 유지보수성의 향상에도 도움이 될 수 있습니다.

게다가 IDE는 이를 분석해 자동완성 기능까지 제공하니 생산성의 향상에도 도움을 줍니다.

 

TypeScript를 처음 접한다면, 타입을 선언하는 데에 어려움이 다소 존재할 수 있습니다.

컴파일 에러를 피하기 위해 any로 지정하는 경우도 종종 생깁니다.

any는 앞서 말한 TypeScript의 장점을 모두 상쇄합니다. 최대한 쓰지 않으려고 하는 게 중요하겠죠.

타입을 선언하는데에 어려움이 있는 것은 타입 시스템에 대한 이해가 부족하거나, 복잡한 유형의 타입이기 때문일 것입니다.

 

TypeScript는 Extract, Exclude, Pick, Omit 등 빌트인 유틸리티 타입들이 존재합니다.

이 유틸리티 타입들은 과연 어떻게 추론되는지 알고 계신가요?

 

이외에도 잘 다듬어진 유틸리티 타입들을 만들어놓은 라이브러리도 존재합니다.

 

TypeScript를 공부하며, 이런 유틸리티 타입 라이브러리들이 어떻게 작동하는지 내부 코드들을 살펴보는 것은 많은 도움이 될 것입니다.

타입 시스템을 이해해감에 따라 TypeScript의 생산성과 DX는 더욱 좋아질 것입니다.

 

최근 TypeScript를 십분 활용해 보다 엄격한 타이핑으로 생산성과 DX를 향상시킬 수 있는 고도화된 컴포넌트의 제작방식에 흥미를 느껴 공부하던 중 발견한 프로젝트를 하나 소개합니다.

 

마치 코딩테스트하는 것처럼 TypeScript 타입을 만들고 적용하며 문제를 푸는 방식입니다.

저도 쉬움까지는 간단히 풀 수 있었지만, 보통 난이도부터는 약간씩 고민하게 되는 부분들이 생기더라고요.

같은 타입을 추론함에도 테스트를 통과하지 못할 때도 있었습니다.

 

그래서 이 글을 시작으로 챌린지를 진행하며 조금 더 타입 시스템을 이해하고 새로 알게 된 것들을 기록하려 합니다.

이 글을 읽은 여러분 모두 챌린지를 통해 함께 성장할 수 있는 기회가 되었으면 좋겠습니다.

 

감사합니다.

 

 

GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

Collection of TypeScript type challenges with online judge - GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

github.com

이 프로젝트는 타입 시스템이 어떻게 작동하는지 이해하고, 자신의 유틸리티를 작성해보거나 챌린지를 재미있게 해 보는 것을 목표로 하고 있습니다. 또한 현업에서 마주하게 되는 질문과 해답을 위한 커뮤니티를 만들기 위한 목적도 있습니다! 이 또한 챌린지의 한 부분이 될 수 있겠죠!

 

* 아래는 앞서 언급한 유틸리티 타입 라이브러리들의 링크입니다. 이외에도 많은 라이브러리가 있습니다. 소스들을 살펴보는 것만으로도 충분한 공부와 깨달음을 얻을 수 있을 것이라 의심치 않습니다.


 

GitHub - sindresorhus/type-fest: A collection of essential TypeScript types

A collection of essential TypeScript types. Contribute to sindresorhus/type-fest development by creating an account on GitHub.

github.com

 

GitHub - piotrwitek/utility-types: Collection of utility types, complementing TypeScript built-in mapped types and aliases (thin

Collection of utility types, complementing TypeScript built-in mapped types and aliases (think "lodash" for static types). - GitHub - piotrwitek/utility-types: Collection of utility types...

github.com

 

GitHub - millsp/ts-toolbelt: 👷 TypeScript's largest type utility library

👷 TypeScript's largest type utility library. Contribute to millsp/ts-toolbelt development by creating an account on GitHub.

github.com