TypeScript에서 제네릭 제약 조건에 타입 매개변수 사용하기
TypeScript에서는 또한 하나의 타입 매개변수가 다른 타입 매개변수에 의해 제한되도록 선언하는 것이 가능합니다. 이는 하나의 객체에서 다른 객체로 속성을 복사해야 할 때, 불필요한 속성을 전달하지 않도록 보장해야 할 때 필요합니다.
다음 예제를 살펴보겠습니다. 변수의 길이를
정의하는 함수 myFunc로 다시 돌아가 보겠습니다:
function myFunc <T> (data: T): T {
console.log(data.length); // 오류
return data;
}
그러나 이제 우리는 이 함수가 length 속성을
가진 타입들하고만 작동하도록 만들고 싶습니다.
이를 위해 length 속성을 숫자 타입으로 가지는
인터페이스 ILength를 만들어 보겠습니다:
interface ILength {
length: number;
}
다음으로, 우리의 함수에서 extends 키워드를 통해
ILength를 상속하는 제네릭 타입을 지정하겠습니다:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
다음은 우리의 전체 코드입니다:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
이제 우리 함수의 동작을 확인하고 문자열의 길이를 찾아보겠습니다:
console.log(myFunc('abcde'));
실행된 코드의 결과:
5
'abcde'
이제 매개변수로 배열을 전달해 보겠습니다:
console.log(myFunc(['a', 'b', 'c']));
실행된 코드의 결과:
3
[ 'a', 'b', 'c' ]