이렇게 타이핑은 한 단계씩 차근차근 진행합니다. 다양한 테스트 사례가 있어야 정교하게 타이핑할 수 있습니다. 이제 완벽하게 타이핑한 것일까요? 아직 확신할 수는 없습니다. 그래도 대부분의 경우에는 문제없이 기능할 것입니다.
이제 타입스크립트가 lib.es5.d.ts에서 타이핑한 forEach 메서드를 확인해봅시다.
lib.es5.d.ts
interface Array<T> {
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
}
거의 비슷하게 했지만 thisArg?: any라는 두 번째 매개변수가 있습니다. forEach 메서드 사용법에서 놓치고 있던 부분이죠. thisArg는 콜백 함수 선언문에서 this를 사용할 때, this 값을 직접 바꿀 수 있게 하는 부분입니다. this 값을 직접 바꾸지 않는다면 브라우저에서는 this가 window가 되고, Node.js에서는 global이 됩니다. strict 모드("use strict")에서는 undefined가 됩니다.
이처럼 타입 선언을 살펴보다 보면 미처 알지 못하던 사용법을 발견하기도 됩니다. 타입 선언이 해당 함수에 대한 설명서 역할을 하는 것입니다.