javascript

타입스크립트 제너릭(Generic) / 레코드(Record)

제너릭(Generic)

“사용시에 타입을 지정”

  1. 함수나 클래스를 만들 때는 타입을 몰라도 되고, 사용할 때 타입을 지정할 수 있음

  2. 제너릭 함수가 사용된 함수를 볼때는 먼저 파라미터를 보면 이해가 쉬움(*중요)

예시:

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

const num = identity<number>(42);     // 숫자
const str = identity<string>("안녕"); // 문자열

<T>가 제너릭이며, T는 사용 시점에 결정되는 타입입니다.


레코드(Record)

  1. 객체의 키와 값의 타입을 지정할 수 있음

  2. 키 이름은 제한 가능, 값의 타입은 통일 가능

  3. { 'a': string }처럼 객체의 타입을 지정하는것 대신, Record<키타입, 값타입> 형식으로 선언 가능

    (내가 항상 습관적으로 객체타입을 {키:값}으로 지정하는데 그것보다 확장성있게 {키타입:값타입}으로 사용할수있다는 말임(*중요)

예시 1: 키가 문자열, 값이 문자열

type PageInfo = Record<string, string>;

const pages: PageInfo = {
  home: "홈페이지",
  about: "소개 페이지",
};

예시 2: 키 이름 제한

type PageInfoLimited = Record<'home' | 'about' | 'contact', string>;

const pagesLimited: PageInfoLimited = {
  home: "홈페이지",
  about: "소개 페이지",
  contact: "문의 페이지",
  // profile: "프로필"  // ❌ 에러: 'profile'은 허용되지 않은 키
};

// Record<'home' | 'about' | 'contact', string>는 허용된 키('home' | 'about' | 'contact')만 가질 수 있으며, 값은 모두 문자열이어야 함.