강력한 generic 타입을 통해 입력되는 값의 타입을 추측하는 것은
좋은 일이다.
하지만 모든 타입을 고려해 함수를 작성하는 일은 잘 없기 때문에 extends를 사용해 narrowing을 해주도록 하자
<T extends {length:number}>
이 코드의 뜻은
T를 사용해 generic 타입을 사용할 것인데 T의 method인 length가 number타입을 가질 수 있는지를 판별해 input값을 가려받는다.
function longest<T extends {length:number}>(a:T,b:T){
if(a.length>=b.length){
return a;
}else{
return b;
}
}
const longerArray = longest([1,2],[3,4,5]);
const longerString = longest('abc','abcde');
const longerNumber= longest(1,23); // error!