우아한 타입스크립트

  • 타입시스템 올바르게 사용하는 법

  • 실전 타입스크립트 코드 작성하기

목표

  • 타입스크립트로 타이핑을 잘하면, 런타임 전에 미리 알 수 있는 오류도 있다.

타입시스템 올바르게 사용하는 법

  1. 작성자와 사용자

  2. interface와 type alias

  3. 서브 타입과 슈퍼 타입

  4. 타입 추론 이해하기

  5. Type Guard로 안전함을 파악하기

  6. Class를 안전하게 만들기

1. 작성자와 사용자

타입시스템

  • 컴파일러에게 사용하는 타입을 명시적으로 지정하는 시스템

  • 컴파일러가 자동으로 타입을 추론하는 시스템

타입스크립트의 타입 시스템

  • 타입을 명시적으로 저정할 수 있다.

  • 타입을 명시적으로 지정하지 않으면, 타입스크립트 컴파일러가 자동으로 타입을 추론

타입추론에 의지하는 경우

a의 타입은 any가 되고 return값은 number가 된다.

nolmplicitAny 옵션을 키면

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

위 예시의 a를 any라고 판단되어 에러를 뿜뿜

number 타입으로 추론된 리턴 타입

런타임과 컴파일타임의 타입이 달라진다. 런타임때는 return 타입이 number로 추론되어 문제가 없는데, f4(-5) + 5 컴파일타임인 경우 undefined가 될 수 있다.

strictNullChecks 옵션을 켜면

모든 타입에 자동으로 포함되어 있는 nullundefined 를 제거해줍니다. 키지 않는다면 모든 타입에 null과 undefined가 들어가게 된다. 그래서 런타임과 컴파일타임의 타입이 달라진다.

undefined와 연산할 수 있다는 에러를 알려준다.

명시적으로 리턴 타입을 지정해라

시그니처를 명확하게 명시하면 좋다. (작성자를 위해서)

noImplicitRetrurns 옵션을 키면

바디내용 리턴이 정확하게 되지 않는다면 에러뿜뿜

2. interface와 type alias

이름기반으로 역할 분리 nominal type system

구조가 같아도 이름이 다르면 다르다.

3. 서브 타입과 슈퍼 타입

서브타입이란 집합의 관계에서 포함되는 것 슈퍼타입은 그 상위

공변성: 같거나 서브 타입인 경우 할당이 가능하다.

반병: 함수의 매개변수 타입만 같거나 슈퍼타입인 경우, 할당이 가능하다.

unknown은 any 대신

제안을 만들어 가면서 한다.

4. 타입 추론 이해하기

let과 const의 타입 추론 (+as const)

Best common type

가장 공통적인 타입을 찾아낸다.

Contextual Typing - 위치에 따라 추론이 다름

5. Type Guard 로 안전함을 파악하기

1. typeof Type Guard - 보통 Primitive 타입일 경우

2. instanceof Type Cuard

instanceof Type Guard를 많이 사용하는 경우 Error 처리

in operator Type Guard - object의 프로퍼티 유무로 처리하는 경우

literal Type Guard - object의 프로퍼티가 같고, 타입이 다른 경우

custom Type Guard

Class Property의 타입을 명시적으로 지정해야한다.

stirctPropertyInitialization 옵션을 켜면 class의 property가 생성자 혹은 선언에서 값이 지정되지 않으면, 컴파일 에러를 발생시켜 주의를 준다.

초기값을 설정하던가

생성자에서 초기화를 한다.

v4.0.2 부터는 생성자에 의해 추론된다.

그러나 여전히 생성자를 벗어나지 못하면 추론되지 않는다.

Last updated

Was this helpful?