강의

멘토링

커뮤니티

Inflearn Community Q&A

devleeee's profile image
devleeee

asked

[Renewal] TypeScript All-in-One: Part 1. Basic Grammar

Create your own filter type

filter 질문 있습니다.

Resolved

Written on

·

374

0

기존 배열 함수를 사용할 때는 filter 메서드의 인자로 v is string을 넣어주지 않아도 작동되는데 선생님께서 정의하신 filter 메서드의 경우는 callback에 v is string을 넣어줘야만 작동되는지 궁금합니다.

기존의 filter

const d = [1, 2, '3', 4, '5'];
d.filter((value) => typeof value === 'string');

 

수업 시간에 작성한 filter

 interface Arr<T> {
   forEach(callback: (value: T, index: number) => void): void;
   // map(callback: (value: T, index: number) => any): any[];
   map<U>(callback: (value: T, index: number) => U): U[];
   filter<S extends T>(callback: (value: T, index: number) => value is S): S[];
 }
const c: Arr<string | number> = ['1', 2, '3', 4, '5'];
const d = c.filter((item): item is string => typeof item === 'string');
typescript

Answer 1

1

devleeee님의 프로필 이미지
devleeee
Questioner

공부해서 유추해본 결과

저희가 작성한 필터링 방식은 custom type guard를 썼기 때문에 is를 명시해줘야 하지만

d.ts 파일을 보니 아래와 같은 코드가 있었네요. 때문에 명시적으로 custom type guard를 명시적으로 쓰지 않아도 unknown으로 처리되도록 되어 있는 것 같습니다.

 filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];

혹시 이렇게 구현되었기 때문에 기존의 filter 함수는 custom typeguard를 쓰지 않아도 되는게 맞는 걸까요?

zerocho님의 프로필 이미지
zerocho
Instructor

네 다만 기존 배열도 is를 안 쓰면 타입 추론이 제대로 안 됩니다. 한 번 해보세요.

devleeee님의 프로필 이미지
devleeee
Questioner

오 감사합니다 선생님 새로운걸 알아가네요!

devleeee's profile image
devleeee

asked

Ask a question