← Back to NOTES 🌰 ← Back to Effective TypeScript

← 아이템 13 - 타입과 인터페이스의 차이점 알기

핵심 요약

코드에서 DRY(Don't Repeat Yourself) 원칙을 적용하듯이 타입에도 동일하게 적용해야 한다. 타입에 이름을 붙이고, extends로 인터페이스를 확장하며, Pick, Partial, ReturnType 같은 제네릭 타입과 keyof, typeof, 인덱싱, 매핑된 타입을 활용하여 타입 간 반복을 줄일 수 있다.

자세한 내용

DRY 원칙을 타입에 적용

코드에서 반복을 줄이듯이 타입에서도 반복을 줄여야 한다. 타입 중복은 코드 중복만큼 많은 문제를 야기한다.

타입 반복 줄이는 방법

  1. 타입에 이름 붙이기: 중복되는 타입을 별도의 타입으로 정의
  2. extends 사용: 인터페이스 확장으로 반복 제거
  3. 인덱싱: State['userId'] 형태로 특정 속성 타입 참조
  4. 매핑된 타입: [k in 'userId' | 'pageTitle']: State[k] 형태
  5. 제너릭 타입: Pick, Partial, ReturnType 등 활용
  6. typeof 연산자: 값으로부터 타입 추출
  7. ReturnType: 함수 반환 타입 추출

제너릭 타입 제한

extends를 사용하여 제너릭 타입을 제한(constraint)할 수 있다.

예제 코드

// 반복되는 타입 - 나쁜 예시
interface Person {
  firstName: string;
  lastName: string;
}

interface PersonWithBDay {
  firstName: string;
  lastName: string;
  bday: Date;
}