Item 44 타입 커버리지를 추적하여 타입 안전성 유지하기

noImplicitAny를 설정해도 위험은 남아있다

noImplicitAny를 설정해 모든 암시적 any 대신 명시적 타입 구문을 추가해도 any 관련 문제는 남아 있을 수 있다.

  1. 명시적 any 타입 - any의 범위를 좁히고 구체적으로 만들어도 여전히 any 타입이다.

  2. 서드파티 타입 선언 - @types 선언 파일로부터 any 타입이 전파되므로 특별히 조심이 필요하다.

type-coverage 패키지를 활용하자

$ npx type-coverage
9985 / 10117 98.69%

any를 추적할 수 있다. 10,117개 심벌 중 9,985(98.69%)가 any가 아니거나 any의 별칭이 아닌 타입을 갖고 있음을 알 수 있다.

--detail 플래그를 붙이면 any 타입이 있는 곳도 출력할 수 있다.

$ npx type-coverage --detail
path/to/code.ts:1:10 getColumnInfo
path/to/module.ts:7:1 pt2

서드파티 모듈로부터 오는 any

서드파티 모듈로부터 오는 any 타입은 몇 가지 형태로 등장한다.

  • declare module 'my-module' 과 같이 전체 모듈에 any 타입을 부여하는 것

  • 타입에 버그가 있는 경우

Summary

  • noImplicitAny가 설정되어 있어도 명시적 any 또는 서드파티 타입 선언(@types)을 통해 any 타입은 코드 내에 여전히 존재할 수 있다는 점을 주의하자.

  • 작성한 프로그램의 타입이 얼마나 잘 선언되었는지 추적해야 한다. 추적함으로써 any의 사용을 줄여 나갈 수 있고 타입 안전성을 꾸준히 높일 수 있다.

Last updated