타입 변수 응용하기 - 제네릭
사례1
function swap<T, U>(a: T, b: U){
return [b, a];
}
const [a, b] = swap('1', 2);
사례2
function returnFirstValue<T>(data: [T, ...unknown[]]){ // T 타입 다음부턴 알필요 없어서 rest파라미터 형식으로 unknown[]써줌
return data[0];
}
let num = returnFirstValue([0, 1, 2]);
// 0
let str = returnFirstValue([1, "hello", "mynameis"]);
// 1
사례3
// length가 number인 프로퍼티를 가지고 있는 객체를 확장 (무조건 length를 가지고 있어야함)
function getLength<T extends { length: number }>(data:T){
return data.length;
}
let var1 = getLength([1, 2, 3]); // 3
let var2 = getLength("12345"); // 5
let var3 = getLength({ length: 10}); // 10
// let var4 = getLength(10); -> 얘는 length를 가지고 있지 않아서 허용 X