NoImplicitAny, StrictNullChecks이해하기

최제원·2022년 11월 22일
1

Effective TypeScript

목록 보기
1/1
post-thumbnail

Ts Setting

가급적 설정 파일을 사용하는 것이 좋다 그래야만 내가 타입스크립트를 어떻게 사용할 계획인지 동료들 혹은 다른 도구들이 알 수 있다
tsc --init으로 간단하게 생성이 가능하며 타입스크립트의 설정들은 어디서 소스 파일을 찾을지,
어떤 종류의 출력을 생성할지 제어하는 내용이 대부분이다 반면에 대부분의 언어에서는 허용하지 않는 언어 자체의 핵심 요소들을 제어하는 설정도 존재한다
타입스크립트는 어떻게 설정하느냐에 따라 완전히 다른 언어가 될 수 있으며 설정을 제대로 사용하고자 한다면
noImplicitAny, strictNullChecks의 이해가 불가피하다


1. noImplicitAny


noImplicitAny는 변수들이 미리 정의된 타입을 가져야 하는지 여부를 제어한다

해당 코드는 noImplicitAny가 해제되어 있을 때는 유효하다

function add(a, b) {
  return a+b;
}

IDE에서 add부분에 마우스를 올려 보면 타입스크립트가 추론한 함수의 타입을 알 수 있다

// 추론된 타입
function add(a:any, b:any): any

any 타입을 파라미터에 사용한면 타입 체커는 무력해진다 any는 유용하지만 매우 주의해서 사용해야 한다 ( 후 포스팅에서 다룰 예정 )

다음 예제를 알아보자

function add(a, b) {
	// ~'a'매개변수는 암시적으로 'any' 형식이 포함됩니다
  	// ~'b'매개변수는 암시적으로 'any' 형식이 포함됩니다
  return a+b; 
}

any를 코드에 넣지 않았지만 any 타입으로 간주되기 때문에 이를 noImplicitAny(암시적 any)라고 부릅니다

그런데 같은 코드임에도 noImplicitAny가 설정되었다면 오류가 됩니다

이 오류들은 명시적으로 any를 선언해 주거나 더 분명한 타입을 사용하면 해결할 수 있습니다

function add(a: number, b:number) {
  return a+b; 
}

TypeScript은 타입을 포함할 때 가장 효과적이기 때문에 되도록이면 noImplicitAny을 설정해야 함

noImplicitAny를 설정함으로써 코드를 작성할 때 항상 타입을 체크하는 습관을 들여

TypeScript가 문제를 발견하기 쉽게 코드를 작성, 코드의 가독성을 높여 생상성을 향상시키도록 노력해야함

noImplicitAny를 해제 하는 경우는 자바스크립트로 되어 있는 기존 프로젝트를
타입스크립트로 전환하는 상황에 필요함

2. strictNullChecks


strictNullChecks는 nullundefined가 모든 타입에서 허용되는지 확인하는 설정

다음은 예제는 strictNullChecks가 해제되었을 때 유요한 코드이다

const x:number = null;    // 정상, null은 유요한 값입니다.

그러나 strictNullChecks가 설정되어 있다면 오류가 검출됩니다

const x:number = null;    // ~'null'형식은 'number' 형식에 해당할 수 없습니다.

null 대신 undefined를 써도 같은 오류가 검출됨 null을 허용하려고 한다면, 의도를 명시적으로 드러냄으로 오류를 해결할 수 있음

const x:number| null = null;    

만약 null을 허용하지 않으려면, 이 값이 어디서부터 왔는지 찾아야 하며, null을 체크하는 코드 혹은 단언문을 추가해야 함

const el = document.getElementById('status');
el.textContent = 'Ready;

if(el) {
  el.textContent = 'Ready'; // 정상, null은 제외됩니다.
}	
el!.textContent= 'Ready'; // 정상, el이 null이 아님을 단언합니다.

위 예제와 같이 strictNullChecks은 null과 undefined관련된 오류를 잡아 내는 많은 도움을 줌 반면에 코드 작성을 어렵게 한다

위와 같이 TypeScript 설정에는 언어에 영향을 미치는 설정들이 존재합니다 그중 가장 중요한 noImplicitAny, strictNullChecks을 알아보았다

💡 프로젝트를 진행중 동료의 예제 혹은 내 예제의 오류가 재현되지 않는다면, 컴파일러 설정이 동일한지 먼저 확인해 보자

profile
Why & How

0개의 댓글

관련 채용 정보