"Compiler 가 뭐가 어떤 타입인지 못 알면, default 가 '뭐든 OK' 면 안 됨."
뭐 잡아
noImplicitAny 없으면 compiler 가 annotation 없고 추론 불가능한 값을 조용히 any 로 타입. Annotation 없고 callsite 추론 못 하는 함수 parameter? any. 초기화 또는 annotation 없이 선언된 변수? any. '나 체크하지 마' 타입이 경고 없이 codebase 통해 퍼짐.
Flag 켜지면 그런 모든 case 가 compile 에러. Annotate 하거나 inference 성공 가능하게 코드 다시 써야. 명시 any (: any) 는 여전히 허용 — flag 는 암묵 case 만 잡음.
왜 가장 중요한 strict flag
7 strict-family flag 중 noImplicitAny 가 가장 넓은 카테고리의 latent 안전 부족 잡음. 기초; 다른 거 위에 빌드. Strict 아닌 codebase 를 strict 로 migration 할 때 이거 먼저 켜.
Migration playbook
Legacy codebase 에 noImplicitAny 켜면 보통 수백 에러. Migration 경로:
- 먼저 hot-path public API annotate.
- Leaf 부터 안쪽으로 파일별로 sweep.
- 진짜 타입 없는 case 엔 IDE 의 quick-fix 써서
any명시 삽입. 이게 암묵any들을 아무것도 깨지 않고 visible 하게. - 시간이 지나며 각 명시
any를 진짜 타입으로 대체.
noImplicitAny 가 'type system 이 내 버그 잡음' 과 'type system 이 어깨 으쓱하고 통과시킴' 사이의 선. 항상 켜놔.