function filter1<Type>(arr: Type[], func: (arg: Type) => boolean): Type[] {
return arr.filter(func);
}
function filter2<Type, Func extends (arg: Type) => boolean>(
arr: Type[],
func: Func
): Type[] {
return arr.filter(func);
}
위 두 코드는 같은 동작을 한다.
어떤 코드가 더 쉬워보이는가? 위의 코드가 더 쉽게 느껴진다.
아래의 코드는 extends를 사용해 특정 사용방법만을 강제해준다 위의 경우 함수를 타입으로 할 것을 강제한 것이다.
하지만 그냥 위의 코드처럼 함수또한 타입이기 때문에 아래처럼 해줄 이유는 없다.
코드의 복잡성을 늘릴 뿐이기 때문이다.