타입스크립트의 설정 이해

설정파일

다음의 코드가 오류없이 타입 체커를 통과할 수 있는지 생각해보자

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

타입스크립트의 설정을 알기 전까지는 대답할 수 없다.

타입스크립트 컴파일러는 매우 많은 설정을 가지고 있다. (100개가 넘음 ㄷㄷ)
또한 이 설정들은 커맨드 라인에서 사용할 수가 있다.

JS commend line

$ tsc --noImplicitAny program.ts

tsconfig.json

또는 tsconfig.json 설정 파일을 통해서도 가능하다.

{
	"compilerOptions":{
    	"noImplicitAny": true
    }
}

가급적 설정 파일을 사용하는 것을 추천한다. 그래야만 타입스크립트를 어떻게 사용할 계획인지 동료들이나 다른 도구들이 알 수 있다.

  • 설정 파일은 tsc --init 실행으로 쉽고 간단하게 생성이 가능하다.

설정은 대부분 어디서 소스 파일을 찾을지, 어떤 종류의 출력을 생성할지 제어하는 내용이 대부분이다.

🙋🏻‍♂️ 대부분의 언어에서는 허용하지 않는 고수준 설계 설정인, 언어 자체의 핵심 요소들을 제어하는 설정도 있다!


noImplicitAny와 stricNullChecks

설정을 제대로 사용하려면, noImplicitAny와 stricNullChecks를 이해해야 한다.

  • stricNullChecks를 사용하려면, noImplicitAny를 먼저 설정 해야한다.

noImplicitAny

noImplicitAny(x)

다음 코드는 noImplicitAny가 해제되어 있을 때, 유효한 코드이다.

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

편집기에서 add 부분에 마우스를 올려 보면, 타입스크립트에서 추론한 타입을 알 수 있다.

function add(a: any, b: any): any

any 타입을 매개변수에 사용하면 타입 체커는 의미가 없어진다.
따라서 any는 만능같아 보이지만 매우 주의해서 사용 할 필요가 있다.

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

any를 코드에 넣지 않았지만, any타입으로 간주되기 때문에 이를 '암시적 any'라고 부른다.

noImplicitAny(o)

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

그런데 같은 코드임에도 noImplicitAny가 설정되어 있다면 오류가 된다.
이 오류들은 명시적으로 : any라고 선언을 하거나, 더 분명한 타입을 사용해야만 해결할 수 있다.

타입스크립트는 타입 정보를 가질 때 가장 효과적이기 때문에, 되도록 noImplicitAny를 설정해야 한다. 그렇게 하면 코드의 가독성이 좋아지고, 문제의 발견이 수월해지며 개발자의 생산성이 향상된다.


stricNullChecks

stricNullChecks는 null과 undefined가 모든 타입에서 허용되는지 확인하는 설정이다.

stricNullChecks(x)

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

그러나 stricNullChecks를 설정하면 오류가 난다.

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

null대신에 undefined를 써도 같은 오류가 난다. 만약 null을 사용하려고 한다면, 아래와 같이 의도를 명시적으로 드러내야한다.

const x: number | null = null; 

만약 null을 허용하지 않으려면, 이 값이 어디서부터 왔는지 찾아야하고, null을 체크하는 코드나 단언문(assertion)을 추가해야 한다.


요약

  • 타입스크립트 컴파일러는 언어의 핵심 요소에 영향을 미치는 몇 가지 설정을 포함하고 있다.

  • 타입스크립트 설정은 커맨드 라인을 이용하기보다는 tsconfig.json을 사용하는 것이 좋다.

  • 자바스크립트 프로젝트를 타입스크립트로 전환하는게 아니라면 프로젝트 초기설정으로 noImplicitAny를 설정하는 것이 좋다.

  • 'undefined는 객체가 아닙니다.'와 같은 런타임 오류 방지를 위해서, stricNullChecks를 설정하는 것이 좋다.

profile
개인 이력, 포폴 관리 및 기술 블로그 사이트 👉 https://aimzero-web.vercel.app/

0개의 댓글