map 타입 만들 때도 재미있었는데
filter 타입 만드는 것도 재미있었어요
어려웠던 점은
extends 키워드 때문에 엄청나게 헷갈렷엇네요
이 부분 잘 이해하려면
부모클래스는 자식클래스가 될 수 없고
자식클래스는 부모클래스가 될 수 있다는 것을 알고있어야하는 것 같아요
(자식클래스는 부모클래스로 캐스팅 가능 반대는 불가)
interface Arr<Parent> {
filter<Child extends Parent>(callback: (v: Parent) => v is Child): Child[];
}
const temp: Arr<number | string> = [1, 2, "3"];
//Parent number | string
//Child string
//상속이기 때문에 Child가 number | string (넓은 타입) 이라고 생각될 수 있다는 점이 헷갈리는 포인트