(...)
    [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에 있는 배열의 인터페이스와 타입 매개변수가 동일해야 하기 때문입니다.

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