더북(TheBook)

타입 서술 함수를 제거했지만 잘 추론됩니다. r1r4의 콜백 함수는 타입 서술 함수가 아니라서 두 번째 myFilter 타이핑에 해당됩니다. 여기서는 원본 배열의 타입과 동일한 T[]를 반환하기에 타입 추론을 제대로 할 수 있습니다.

lib.es5.d.ts 파일을 보세요.

lib.es5.d.ts

interface Array<T> {
  ...
  filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];
  filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];
  ...
}

직접 만들었던 myFilter 메서드와 비슷하게 구성되어 있습니다. 두 번째 filter 메서드의 콜백 함수 반환값이 unknown이라는 점만 다릅니다. boolean 대신 unknown으로 한 이유는 실제로 filter 메서드가 반드시 boolean을 반환할 필요가 없기 때문입니다.

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