작성자와 사용자의 관점으로 코드 바라보기

honeyricecake·2022년 8월 9일
0

타입스크립트

목록 보기
5/6

타입 시스템

컴파일러에게 사용하는 타입을 명시적으로 지정하는 시스템
vs
컴파일러가 자동으로 타입을 추론하는 시스템

타입스크립트의 타입 시스템은 두가지를 모두 사용할 수 있다.

타입이란 해당 변수가 할 수 있는 일을 결정한다.

따라서 이런 일이 일어날 수 있다.

타입스크립트의 추론에 의지하는 경우

이 함수의 인자는 타입을 명시하지 않았으므로 any로 추론되고
함수의 리턴타입은 number로 추론된다.

따라서 방금전과 같은 일이 똑같이 일어날 수 있다.

이런 위험한 요소를 없애기 위하여 컴파일러에게 이런 형태를 아예 작성자가 사용할 수 없게 하는 옵션이 있다.

그게 바로 noImplicityAny 옵션이다.

implicity : 함축, 내재

noImplicityAny

타입을 명시적으로 지정하지 않은 경우, 타입스크립트가 추론 중 'any'라고 판단하게 되면 컴파일 에러를 발생시켜 명시적으로 지정하도록 유도한다.
(Any를 내재하지 말아라)

ex.

function f4(a: number) {
	if(a > 0) {
    	return a * 38;
    }
}

그런데 이는 number가 변수로 들어가고 리턴도 a * 38이므로 number가 리턴이 된다고 타입스크립트에서 추론하지만,
변수가 0초과가 아니면 undefined가 리턴된다.

그럼에도 타입스크립트는 number가 리턴된다고 명시한다.
왜냐하면 undefined가 number에 포함되기 때문이다.

이러한 문제를 해결하기 위해

strictNullChecks 옵션을 켜서 모든 타입에 자동으로 포함되어 있는 null, undefined를 제거해준다.

이렇게 되면 해당 함수의 리턴 타입은 number | undefined 이다.
그리고 코드상으로 undefined가 리턴될 때는 error를 throw하는 등의 방식을 사용해야 한다.

지금까지는 리턴타입을 추론하는 방식을 사용한 것이었고 이보다는 리턴타입을 명시해주는 것이 훨씬 에러를 줄일 수 있다.

그래서 사용하는 옵션이
noImplicityReturns 이다.
이는 함수 내에서 모든 코드가 명시적으로 값을 리턴하지 않으면 컴파일 에러를 발생시킨다.
(리턴을 내재하지 말고 명시해라)

object 를 명시하는 예시

이런 식으로 object를 리터럴로 모두 쓰기 힘드므로

이런 식으로 인터페이스 들을 사용하는 것을 이후 익힐 것이다.

0개의 댓글