[이펙티브 타입스크립트] Typescript 'any'사용을 피해야하는 이유?

2023. 2. 4. 23:53프론트엔드/Typescript

이펙티브 타입스크립트

이펙티브 타입스크립트:동작 원리의 이해와 구체적인 조언 62가지, 인사이트 지금까지 탑다운 방식으로 프로덕트를 어찌저찌 만들어 내는데는 문제가 없어졌지만,
타입스크립트의 작동원리, 미처 알지 못했던 타입스크립트 사용 스킬 등에 관한
기초가 부족한 것 같다는 생각이 들게 되었고,
타입스크립트를 더 깊게 이해하기 위해 '이펙티브 타입스크립트' 라는 책을 구매해서 읽고 있다.

any 타입은 사용을 하면 안된다?

타입스크립트를 공부할 때 가장 먼저 타입스크립트가 지원하는 타입들에 대해 배울텐데 그 중 ' any '타입은 사용을 지양해야 한다는 글을 많이 봤을 것이다.

필자 역시 any 타입의 사용을 지양해야 한다는 글을 읽은 적이 있는데, 개인적으로 무언가 새로운 것을 배울때 이렇게 사용을 지양해야 한다는 것이 나타나면 어느정도 익숙해 질때까지 해당 기능은 없는것이라고 생각을 하고 스스로 제약을 걸어버리는 편인데, Jquery와 타입스크립트의 any 타입이 그 대표적인 예이다

 

하지만 정확히 any 타입을 지양해야 하는 이유에 대해서는 곰곰히 생각해본 적이 없는것 같다. 이번에 책에서 any 타입을 지양해야 하는 이유를 봤는데 그에 대해 글을 써보고자 한다.


타입체커와 언어서비스를 무력화

 

any 타입으로 지정할 경우 자동완성 기능이 제공되지 않는다.

자동완성 기능 사용불가

개인적으로 타입스크립트를 사용하면서 가장 편리하다고 생각하는 기능은 언어서비스인데, 어떤 객체의 타입을 지정해 놓게되면 해당 객체에 존재하는 속성을 알고 똘똘하게 자동완성기능을 제공해주는데,  any 타입을 사용하게 되면 이런 강력한 기능을 사용할 수 없다.

 

Rename symbol 사용불가

Rename symbol 기능역시 사용할 수 없다.

또한 심볼을 수정하면 해당 심볼을 사용하는 모든 부분을 수정해주는 rename symbol 기능 역시 any 타입을 사용할 경우 사용할 수없다.

위와 같은 기능은 개발의 효율성과 유지보수의 용이성을 높여주는 기능이지만, any 타입을 사용하게 되면 해당 기능을 사용할 수 없게된다.