라이브러리 제작자는 프로젝트 초기에 타입 익스포트부터 작성해야한다
-> 함수의 선언에 이미 타입 정보가 있다면 제대로 익스포트되고 있는 것
유틸리티 Parameters로 매개변수타입을 구성하자
공개 메서드에 등장한 어떤 형태의 타입이든 익스포트하기
-> 익스포트하기 쉽게 만든 라이브러리가 좋은 라이브러리다
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의 일부가 되는 것이기 때문에 반드시 타입 선언에 포함해야 한다
필수가 아닌 의존성을 분리할 때는 구조적 타이핑을 사용하면 된다
공개한 라이브러리를 사용하는 타입스크립트 사용자가 @types 의존성을 가지지 않게 해야한다. 웹 개발자가 NodeJs 관련 의존성을 가지지 않게 해야한다
미러링 기법은 유닛 테스트와 상용 시스템 간의 의존성을 분리하는 데도 유용하다
-> 아이템 4의 getAuthors 예제 참고하기
함수뿐만 아니라, 실제로 반환 타입을 체크하는 것이 훨씬 좋은 테스트 코드이다
-> ex) const lengths: number[] = map([‘John’, ‘Paul’], name -> name.length);
-> 일반적으로 불필요한 타입 선언이지만 테스트코드 관점에서 중요한 역할이다
DefinitelyTyped를 살펴보면, 테스팅을 위해 동일한 방식을 사용한 수많은 타입선언을 볼 수 있음
-> DefinitelyTyped 오픈소스 + 내가 사용하는 오픈소스에 기여할 수 있는 방법 확인
-> 기존의 패키지 타입을 수정하거나 없는 패키지 타입을 새로 생성하거나 해서 이 레포에 기여할 수 있음
콜백이 있는 함수를 테스트할 때, 콜백 매개변수의 추론된 타입을 체크해야 한다
타입을 테스트할 때는 함수 타입의 동일성과 할당 가능성(assignability)의 차이점을 알고 있어야 한다
this가 API의 일부분이라면 역시 테스트해야 한다