
function swap<T>(a: T, b: T ) {
return [b, a];
}
const [] = swap("1", 2);
T는 number타입을 가리키고 있지만 현재 1은 string 타입을 가리키려 해서 아래 사진과 같은 오류가 발생
a와 b는 같은 타입일 수도 있지만 다른 타입일 수도 있다. T와 U로 따로 타입 선언을 해주면 됨function swap<T, U>(a: T, b: U )
a는 string 타입이 되며 b는 number 타입이 된다.function returnFirstValue<T>(data: T) {
return data[0];
}
return 부분에 오류가 발생unknown을 가리키고 있는데 return에서는 data[0]을 반환하려고 하기 때문
data[0]의 타입을 바꾸면 된다.function returnFirstValue<T>(data: T[])
data의 타입은 stirng과 number 타입을 합친 union타입이 된다.function returnFirstValue<T>(data: [T, ...unknown[]]) {
return data[0];
}
data 타입은 튜플이다.T 이다. 그 다음 ...unknown을 적어주면 처음 T를 제외한 그 이후에는 어떤 타입이 들어올지 모르기 때문에 ...unknown으로 작성해주면 됨function getLength<T extends { length: number }>(data: T) {
return data.length;
}
let var1 = getLength([1, 2, 3]);
let var2 = getLength("hello");
let var3 = getLength({ length: 10 });
extends를 사용하여number타입 프로퍼티 length를 가지고 있는 객체를 확장하는 T로 제한한 입 크기로 잘라먹는 타입스크립트
https://www.inflearn.com/course/한입-크기-타입스크립트/dashboard