더북(TheBook)

현재 문제의 원인은 각각 요소와 원본 배열의 타입인 매개변수 va가 모두 number 기반으로 고정되어 있기 때문입니다. Array에는 제네릭 타입 매개변수인 T가 있습니다. T는 요소의 타입을 의미합니다. 따라서 number 대신 제네릭 기반으로 타입을 수정해보겠습니다.

(...)
[true, 2, '3'].myForEach((v) => {
  if (typeof v === 'string') {
    v.slice(0);
  } else {
    v.toFixed();
  }
});
// Property 'toFixed' does not exist on type 'number | boolean'. Property 'toFixed' does not exist on type 'false'.

interface Array<T> {
  myForEach(callback: (v: T, i: number, a: T[]) => void): void;
}

기존 에러 메시지는 전부 사라지고, 테스트 사례에 있었으나 잡지 못했던 에러를 제대로 잡아내기 시작합니다.

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