generic <Type extends {length:number}>(a:Type,b:Type){...

YOUNGJOO-YOON·2021년 8월 22일
0

typeScript

목록 보기
33/65

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 한 것이다.

profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글