더북(TheBook)
(...)
[1, 2, 3].myForEach(function() {
  console.log(this);
});
// this: Window
[1, 2, 3].myForEach(function() {
  console.log(this);
}, { a: 'b' });
/*
this: {
    a: string;
}
*/
interface Array<T> {
  myForEach<K = Window>(callback: (this: K, v: T, i: number, a: T[]) => void, thisArg?: K): void;
}

타입 매개변수 K를 선언했습니다. 타입 매개변수를 선언할 수 있는 자리는 Array<T, K>myForEach<K>인데, Array<T, K>를 수정할 수 없으므로 myForEach<K> 자리에 선언했습니다. Array<T, K>를 수정할 수 없는 이유는 lib.es5.d.ts에 있는 배열의 인터페이스와 타입 매개변수가 동일해야 하기 때문입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.