더북(TheBook)
const r1 = [1, 2, 3].myFilter((v): v is number => v < 2);
const r2 = [1, 2, 3].myFilter((v, i, a): v is never => {});
// const r2: never[]
// A function whose declared type is neither 'void' nor 'any' must return a value
const r3 = ['1', 2, '3'].myFilter((v): v is string => typeof v === 'string');
// const r3: string[]
const r4 = [{ num: 1 }, { num: 2 }, { num: 3 }].myFilter(
  function(v): v is { num: number } {
    return v.num % 2;
  }
);
// Type 'number' is not assignable to type 'boolean'.

interface Array<T> {
  myFilter<S extends T>(callback: (v: T, i: number, a: T[]) => v is S, thisArg?: any): S[];
}

타입 서술 함수가 된 콜백 함수 일부에서 에러가 발생합니다. 타입 서술 함수는 boolean을 반환해야 하기 때문입니다. 오랜만에 자바스크립트 코드를 그대로 타입스크립트에서 쓸 수 없는 상황을 마주했습니다. 콜백 함수를 수정해야 합니다.

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