본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

`noImplicitAny`: 이름 없는 불확실성 막기

~6 min · strict-mode, no-implicit-any

Level 0Curious
0 XP0/93 lessons0/23 achievements
0/100 XP to next level100 XP to go0% complete
"컴파일러가 타입을 알 수 없을 때 ‘무엇이든 가능’으로 조용히 넘어가면 안 돼."

무엇을 잡는가

noImplicitAny가 없으면 표기도 없고 추론할 근거도 없는 함수 매개변수나 초기값 없는 변수가 조용히 any가 될 수 있어. 그 any는 이후 호출과 반환으로 퍼지며 검사를 끄지.

설정을 켜면 이런 자리가 오류가 되어 타입을 적거나 추론 가능한 구조로 고쳐야 해. 명시적인 : any는 여전히 허용되고, 이 설정은 숨어 생긴 any만 막아.

가장 중요한 엄격 설정

일곱 strict 설정 가운데 noImplicitAny가 가장 넓은 범주의 잠재적 불안전을 잡아. 느슨한 기존 코드베이스를 옮길 때 가장 먼저 켤 기반 설정이야.

마이그레이션 네 단계

  1. 사용 빈도가 높은 공개 API부터 타입을 붙여.
  2. 의존이 적은 말단 파일에서 안쪽으로 이동해.
  3. 당장 타입을 알 수 없는 곳은 IDE 도움으로 any를 명시해 숨은 탈출구를 보이게 해.
  4. 명시적 any를 실제 타입으로 차례로 교체해.
noImplicitAny는 타입 시스템이 버그를 잡는 코드와 조용히 포기하는 코드를 가르는 선이야. 항상 켜.

Code

암묵 vs 명시 any·typescript
// noImplicitAny 없이 — 조용히 `any` 타입.
function loose(x) {
  return x.toUpperCase();    // ✅ 컴파일 — x 가 암묵 any
}
loose(42);                    // runtime 에 크래시

// noImplicitAny 와 함께:
function strict(x) {          // ❌ Parameter 'x' implicitly has 'any' type
  return x.toUpperCase();
}

// Fix 1: annotate.
function strictFix(x: string): string {
  return x.toUpperCase();
}

// Fix 2: 명시 any (아직 진짜 모를 때).
function quickFix(x: any) {
  // any 명시 사용 — 최소한 reader 가 봄
  return x.toUpperCase();
}

External links

Exercise

타입을 적지 않은 매개변수를 받는 함수를 작성하고 noImplicitAny를 껐다 켜며 오류가 언제 나타나는지 확인해. 매개변수 타입을 붙여 오류를 없앤 다음, 잘못된 타입을 넘기는 호출이 타입 검사에 잡히는지도 확인해.
Hint
옵션을 끄면 출처 없는 any가 조용히 퍼질 수 있어. 켠 뒤 나타난 오류는 실제 입력 계약을 정하라는 신호로 읽어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.