본문 바로가기
Q&A해결2026년 4월 29일1분 읽기

TypeScript 6.0 strict 켰더니 에러 800개 — 가장 빠른 마이그레이션 순서가 있을까요

레
레거시정복자
조회 594댓글 2

TypeScript 6.0 업그레이드 + strict 기본값 적용으로 컴파일 에러가 800개 정도 떴습니다. 5년차 코드베이스라 어쩔 수 없는데, 어떤 순서로 잡아야 가장 빠를까요? 한 번에 다 켜지 말라는 건 알겠는데, 그럼 옵션 순서가 어떻게 되는지요.

댓글 2

김김영삼6개월 전

옵션을 한 번에 다 켜지 말고 다음 순서로 진행하세요. 각 단계마다 에러 수가 줄어들어 다음 단계가 쉬워집니다.


strict는 7개 옵션의 묶음


순서옵션전형적 영향도
1noImplicitAny★★★ 가장 큼
2strictNullChecks★★★ 가장 큼
3strictFunctionTypes★ 작음
4strictBindCallApply★ 작음
5strictPropertyInitialization★★ 클래스 많으면 큼
6noImplicitThis★ 작음
7useUnknownInCatchVariables★★ catch 많으면 큼

1단계 — noImplicitAny


{ "compilerOptions": {
"strict": false,
"noImplicitAny": true
}}

대부분 함수 파라미터에 타입 추가하는 작업. 자동화 도구 활용:


# ts-migrate (Airbnb)
npx ts-migrate-full ./src

2단계 — strictNullChecks (가장 어려움)


이 단계가 보통 전체 일정의 60%를 차지합니다. ?., ??, type guard를 적극 활용하세요.


// Before
const name = user.profile.name.toUpperCase()

// After
const name = user.profile?.name?.toUpperCase() ?? 'Unknown'

3~6단계 — 한꺼번에


이 4가지는 각각 영향이 작아서 한 번에 켜도 됩니다.


7단계 — useUnknownInCatchVariables


// Before
} catch (e) {
console.log(e.message) // e가 any
}

// After
} catch (e) {
if (e instanceof Error) console.log(e.message)
else console.log(String(e))
}

점진 도입 팁



  • 파일 단위 비활성: 첫 줄에 // @ts-nocheck (임시)

  • 레거시 디렉터리만 별도 tsconfig: tsconfig.legacy.json

  • CI에서 새 PR만 strict 강제: --strict --noEmit src/new/**

  • 매주 100개씩 정리 — 8주에 800개 완료

레레거시정복자(guest)6개월 전
옵션 별 우선순위가 명확해서 큰 도움 됐습니다. 이번 주 noImplicitAny부터 시작해볼게요. 감사합니다!
Ctrl+Enter로 등록