[이펙티브 타입스크립트] 6장 타입 선언과 @types

김재훈·2023년 7월 16일
0

Typescript

목록 보기
1/2

47 공개 API에 등장하는 모든 타입을 익스포트하기

  • 라이브러리 제작자는 프로젝트 초기에 타입 익스포트부터 작성해야한다
    -> 함수의 선언에 이미 타입 정보가 있다면 제대로 익스포트되고 있는 것

  • 유틸리티 Parameters로 매개변수타입을 구성하자

  • 공개 메서드에 등장한 어떤 형태의 타입이든 익스포트하기
    -> 익스포트하기 쉽게 만든 라이브러리가 좋은 라이브러리다

48 API 주석에 TSDoc 사용하기

  • 타입스크립트에서는 타입 정보가 코드에 있기 때문에 TSDoc에서는 타입 정보를 명시하면 안된다

49 콜백에서 this에 대한 타입 제공하기

  • let이나 const로 선언된 변수는 렉시컬 스코프인 반면, this는 다이나믹 스코프

  • 자바스크립트에는 call을 사용하면 this 바인딩을 온전히 제어할 수 있음
    -> const c = new C(); const method = c.logSquares; method.call(c);

  • DOM에서도 this를 바인딩할 수 있다. ex) 이벤트 핸들러

  • 생성자에서 함수를 바인딩하면( this.onClick=this.onClick.bind(this) ) onClick 속성에 this가 바인딩되어 해당 인스턴스에 생성. 속성 탐색 순서(lookup sequence)에서 onClick 인스턴스 속성은 onClick 프로토타입(prototype) 속성보다 앞에 놓이므로, this.onClick은 바인딩된 함수를 참조한다

  • 콜백 함수에서 this를 사용해야한다면 this는 API의 일부가 되는 것이기 때문에 반드시 타입 선언에 포함해야 한다

50 오버로딩 타입보다는 조건부 타입을 사용하기

  • 조건부 타입은 추가적인 오버로딩 없이 유니온 타입을 지원할 수 있다
    ex) function double<T extends number | string>(x: T): T extends string ? string : number;

51 의존성 분리를 위해 미러 타입 사용하기

  • 필수가 아닌 의존성을 분리할 때는 구조적 타이핑을 사용하면 된다

  • 공개한 라이브러리를 사용하는 타입스크립트 사용자가 @types 의존성을 가지지 않게 해야한다. 웹 개발자가 NodeJs 관련 의존성을 가지지 않게 해야한다

  • 미러링 기법은 유닛 테스트와 상용 시스템 간의 의존성을 분리하는 데도 유용하다
    -> 아이템 4의 getAuthors 예제 참고하기

52 테스팅 타입의 함정에 주의하기

  • 함수뿐만 아니라, 실제로 반환 타입을 체크하는 것이 훨씬 좋은 테스트 코드이다
    -> ex) const lengths: number[] = map([‘John’, ‘Paul’], name -> name.length);
    -> 일반적으로 불필요한 타입 선언이지만 테스트코드 관점에서 중요한 역할이다

  • DefinitelyTyped를 살펴보면, 테스팅을 위해 동일한 방식을 사용한 수많은 타입선언을 볼 수 있음
    -> DefinitelyTyped 오픈소스 + 내가 사용하는 오픈소스에 기여할 수 있는 방법 확인
    -> 기존의 패키지 타입을 수정하거나 없는 패키지 타입을 새로 생성하거나 해서 이 레포에 기여할 수 있음

  • 콜백이 있는 함수를 테스트할 때, 콜백 매개변수의 추론된 타입을 체크해야 한다

  • 타입을 테스트할 때는 함수 타입의 동일성과 할당 가능성(assignability)의 차이점을 알고 있어야 한다

  • this가 API의 일부분이라면 역시 테스트해야 한다

profile
같이 협업하며 성장하고싶은, 좋은 개발자를 지향합니다 :)

0개의 댓글