TIL/TypeScript

[TypeScript] 이펙티브 타입스크립트 Item 1~5

JoJobum 2022. 7. 18.

Item1

모든 자바 스크립트 프로그램은 타입 스크립트 프로그램 (자바 스크립트에 문법적인 오류가 없다면, 유효한 타입스크립트 프로그램이기도 함)

타입 스크립트는 자바 스크립트의 런타임 동작을 모델링함 => 런타임 오류 찾으려 시도 But, 모두 찾진 못함

자바 스크립트에서는 허용되지만 타입스크립트에서는 문제가 되는 경우 존재 (ex 잘못된 매개 변수 개수로 함수 호출하는 경우 등)

 

Item2

타입 스크립트는 타입 정보 가질때 효과적 => noImplicitAny 를 설정하여 타입을 명시하자

strictNullChecks 옵션은 null과 undefined을 허용하지 않음으로서 관련된 오류를 잡아줌

 

Item3

타입체크와 컴파일이 동시에 이루어지지 않기에 타입 오류를 수정하지 않고도 컴파일하여 다른 부분 테스트 가능

타입스크립트가 자바스크립트로 컴파일되는 과정에서 모든 인터페이스, 타입, 타입구문을 잃어버림 =>

  1. 런타임에 타입 체크 X
  2. 런타임에 타입 체크를 하고 싶다면 타입 정보를 유지하는 방법일 사용해야함
    1.  특정 속성이 존재하는지 체크하는 방법
    2.  타입 정보를 명시적으로 저장하는 태그 기법
    3.  타입(런타임 접근 X)과 값(런타임 접근 가능)을 둘다 사용하는 기법 == 클래스로 선언
  3. 함수 오버로딩 불가능
  4. 타입이 성능에 영향X

 

Item4

자바스크립트는 덕 타이핑 기반 ( 객체가 어떤 타입에 부합하는 변수와 메서드를 가질 경우 해당 타입에 속하는 것으로 간주하는 방식), 타입 스크립트는 매개변수 값 만족하면 그대로 모델링함 

구조적 타이핑을 사용하면 유닛 테스팅 쉽게 가능, 라이브러리 간의 의존성 완벽히 분리 가능

 

Item5

any 타입에는 타입 안정성이 없음

함수 작성시 약속된 타입을 호출하고 약속된 타입을 반환함 But, any 타입을 사용하면 이를 어길 수 있음

any 타입 사용시 언어 서비스( 자동완성 기능, rename Symbol 등) 사용 불가

any 타입 사용시 코드 리팩터링 때 버그를 숨김

any 타입 사용시 타입 설계를 감춤

any 타입 사용시 타입 시스템의 신뢰도를 낮춤 ( 넘겨받은 변수가 원하는 타입인지 any를 타고 잘못온 것인지 의심하게 된다)

 

=> any 타입 사용 지양하기

 

 

 

반응형

댓글