function longest<Type extends { length:number }>(a: Type, b:Type){
if(a.length>=b.length){
return a;
}else{
return b;
}
}
const longerArray = longest([1,2],[1,2,3]);
console.log("longerArray",longerArray);
const longerString = longest("abc", "abcde");
console.log("longerString",longerString);
const notOk=longest(1,23); // error
// Argument of type 'number' is not assignable to parameter of type '{ length: number; }'.ts(2345)
generic type을 사용하면서
2 개 이상의 인자가 동일하면서
같은 속성을 사용하는 경우 위와 같은 문법을 사용할 수 있다.
function longest<Type extends { length:number }>(a: Type, b:Type)
<Type extends { length:number }>
Type이라는 generic은 length라는 property를 사용할 수 있어야 한다라는 제약을 거는 것이다.
이러면 longest 함수는 인자의 속성 중 length 속성이 붙어 있는 Array나 string만이 들어올 수 있게 된다.
즉 generic type을 narrowing 한 것이다.