현재 문제의 원인은 각각 요소와 원본 배열의 타입인 매개변수 v와 a가 모두 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;
}
기존 에러 메시지는 전부 사라지고, 테스트 사례에 있었으나 잡지 못했던 에러를 제대로 잡아내기 시작합니다.