Generic이란?

재사용 가능한 컴포넌트를 생성하는 도구 상자 중 하나.

function identity(arg: number): number { //number 특정 타입 명시
  return arg;
}
function identity(arg: any): any { // any를 통한 명시
  return arg;
}

any 타입은 어떠한 타입이라도 받을 수 있는 점에서 쓰이는 제너릭 이지만 함수 반환시 어떤 타입인지에 관해 정보를 return 해주지 않습니다.

function identity(arg: any): any { // any를 통한 명시
  return arg;
}

identity(1) // 1이 number 임에도 불구하고 any를 return 함

그래서 무엇이 반환하는지 명시하기 위해 인수의 타입을 캡쳐할 필요가 있습니다. 그래서 따로 값을 지정하지 않고 타입 변수를 사용하여 나타냅니다.

function identity<Type>(arg: Type): Type { 
  return arg;
}

//or

function identity<T>(arg: T): T { 
  return arg;
}

identity 함수에 Type 이라는 타입 변수를 추가 하였습니다.Type은 유저가 준 인수의 타입을 캡쳐 → 이 정보를 나중에 사용할 수 있게 만듭니다. 그 다음Type으로 반환하는 루틴으로 사용됩니다. 이를 통해 타입 정보를 함수의 한쪽에서 다른 한쪽으로 운반 가능케 합니다.