더북(TheBook)

모든 속성이 리터럴 타입인 ZeroNero 인터페이스입니다. typerace 속성의 타입은 동일한데, nameage 속성의 타입은 다릅니다. 이럴 때 제네릭(generic)을 사용해서 중복을 제거할 수 있습니다.

interface Person<N, A> {
  type: 'human',
  race: 'yellow',
  name: N,
  age: A,  
}
interface Zero extends Person<'zero', 28> {}
interface Nero extends Person<'nero', 32> {}

제네릭 표기는 <>로 하며, 인터페이스 이름 바로 뒤에 위치합니다. <> 안에 타입 매개변수(Type Parameter)를 넣으면 됩니다. 서로 다른 부분인 nameage 속성의 타입을 각각 타입 매개변수 NA로 만들었습니다. 선언한 제네릭을 사용할 때는 Person<'zero', 28>과 같이 매개변수에 대응하는 실제 타입 인수(Type Argument)를 넣으면 됩니다. <N, A>로 선언한 것에 <'zero', 28>이 들어가므로 N'zero', A28이 됩니다. 함수의 매개변수에 호출할 때 넣은 인수가 대응되는 것과 유사합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.