Generic 공부 및 예시

// 함수 
function f(x:string){
    return `(${x})`;
}
// 함수 활용
const y = f("1");

// 제너릭이 있는 타입 정의
type F<X extends string> = `(${X})`;

// 예시
type Y = F<`010-${number}-${number}`>;
// 예시 활용
let asf:Y = "(010-1234-5678)";

// 배열 제너릭 정의
type Arrays<T extends number | string>= Array<T>;
// 일부분 빼고 정의
type NonnumericArray<T> = T extends number
    ? never
    : T[]
;

// 예시 활용
let temp:Arrays<number> = [6,4,5];
//예시 활용2
let temp2:Arrays<string> = ["2","3"];

// 예시 활용 잘못된 예시

let temp3:Arrays<Date> = ["1","3"];

// 예시 활용
let temp4:NonnumericArray<number> = [ 1, 2 ];
let temp5:NonnumericArray<string> = [ "1", "2" ];

Generic 딸린 타입을 export 해서 가져올 수 있음

BUT Generic 만 따로 가져 올 수 없음

Extends 란 ? 타입을 한정 시키기 위한 수단

// Extends 없이 모든걸 받기 위한 예시 with 매개변수 value
const log = <T,>(value : T)=>{
  return value;
}

// Extends 사용해서 모든 걸 받기위한 예시 with 매개변수 value
const log2 = <T extends {}>(value: T) =>{
  return value;

}