"null과 undefined는 독립된 타입이야. 허용한다고 직접 말하지 않으면 다른 타입에 숨어들지 않아."
무엇이 달라지는가
설정을 끄면 null과 undefined를 모든 타입에 대입할 수 있어서 string이나 User라고 적힌 값이 실제로는 비어 있을 수 있어. 타입과 런타임의 차이가 null 접근 오류를 숨겨.
설정을 켜면 둘은 별도 타입이 되고, 허용하려는 계약에만 string | null처럼 명시적으로 포함해. 타입이 실행 현실을 정직하게 말하게 되는 거야.
수정 방법 네 가지
- 실제 계약에 맞게
string | null로 넓혀. - 사용 전에
x !== null같은 검사로 좁혀. - 컴파일러보다 확실한 근거가 있을 때만 비-null 단언
!을 드물게 써. - 가능하면 null 자체가 필요 없는 구조로 리팩터링해.
strictNullChecks는 noImplicitAny 다음으로 영향이 큰 엄격 설정이야. 둘을 함께 켜면 실제 코드의 잠재적 불안전 대부분이 드러나.