noImplictAny와 strictNullCheck

김석규·2023년 2월 13일
0

타입스크립트

목록 보기
3/4

이펙티브 타입스크립트를 읽고 이 책에서 권장하는 대로 사이드 프로젝트를 리팩토링하고 있다.

그 중에서도 가장 앞에 나오는 내용이 noImplictAny와 strictNullCheck, 이 두 설정을 적용하라는 것이다. 이 두 설정은 대부분의 언어에서는 허용하지 않는 고수준 설계의 설정인데, 언어 자체의 핵심 요소를 제어한다.

타입스크립트의 타입체크 기능을 제대로 이용하려면 이 두 설정이 무엇인지 알고, 적용하는 것이 좋다.

noImplictAny

noImplictAny는 변수들이 미리 정의된 타입을 가져 하는지 여부를 제어한다. 기본적으로 타입스크립트는 변수에 아무 타입도 설정하지 않으면 암묵적으로 변수를 any로 취급한다. 그러나 any는 타입스크립트의 타입체커를 무력화하기 때문에 신중하게 이용해야 한다.

만약 noImplictAny를 설정하면 변수가 암묵적 any타입이 될 경우 오류를 발생시키기 때문에, 명시적인 any나 분명한 타입을 이용하도록 강제할 수 있다.

타입스크립트는 타입 정보를 가질 때 가장 효과적이기 때문에 noImplictAny를 설정하는 편이 좋다.

strictNullCheck

strictNullCheck는 null과 undefined가 모든 타입에서 허용되는지 제어한다. strictNullCheck를 설정하지 않으면 타입에 관계 없이 null과 undefined가 허용된다.

만약 null과 undefined를 허용한다면 명시적으로 선언해야 한다.

const x: number = null;
// strictNullCheck 옵션을 적용하면 위 코드는 null 형식은 number 형식에 할당될 수 없다는 오류를 발생시킨다.

strictNullCheck은 null과 undefined에 관련된 오류를 잡는 데 많은 도움을 주지만 코드 작성을 어렵게 하기 때문에 가급적 새 프로젝트 처음에 설정해두는 것이 좋다. 자바스크립트를 타입스크립트로 마이그레이션하는 중이거나 타입스크립트에 익숙하지 않다면 꼭 설정하지는 않아도 된다.

적용

실제로 프로젝트에 적용해 보았더니 생각지도 못한 많은 오류가 발생했다. 처음부터 최대한 명시적으로 타입을 설정하려고 했기 때문에 noImplictAny관련 오류는 발생하지 않았는데 strictNullCheck에서 많은 오류가 발생했다.

예를 들면 함수 등을 작성할 때 조건에 맞지 않는다면 'return ;' 형식으로 넘기고는 했는데 여기서 오류가 발생했다. undefined로 적용된 것이다.

또, sql문의 경우 해당하는 데이터가 DB에 없으면 null을 반환하는데 이런 코드들을 찾아 명시적인 null을 적용해주어야 했다.

profile
백엔드 개발자 지망생

0개의 댓글