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을 반환해야 하기 때문입니다. 오랜만에 자바스크립트 코드를 그대로 타입스크립트에서 쓸 수 없는 상황을 마주했습니다. 콜백 함수를 수정해야 합니다.

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