[Effective TypeScript] 3장 22-24 타입 스크립트의 타입시스템

채동기·2023년 3월 1일
0

TypeScript

목록 보기
10/21

아이템22) 타입 좁히기

배열 탐색시 타입 가드를 사용해 타입을 좁힐 수 있습니다.

const jackson5 = ['Jackie', 'Tito', 'Jermaine', 'Marlon', 'Michael'];
function isDefined<T>(x: T | undefined): x is T {
  return x !== undefined;
}
const members = ['Janet', 'Michael'].map(
  who => jackson5.find(n => n === who)
).filter(isDefined);  // 타입은 string[]
  • 분기문 외에도 여러종류의 제어 흐름을 살펴보며 타입스크립트가 타입을 좁히는 과정을 이해해야 합니다.
  • 태그된/구별된 유니온과 사용자 정의 타입 가드를 사용하여 타입 좁히기 과정을 원활하게 만들 수 있습니다.

아이템 23) 한꺼번에 객체 생성하기

  • 속성을 제각각 추가하지 말고 한꺼번에 객체로 만들어야 합니다. 안전한 타입으로 속성을 추가하려면 객체전개({...a, ...b})를 사용하면 됩니다.

  • 객체에 조건부로 속성을 추가하는 방법을 익히도록 합니다.

선택적 필드 방식으로 표현하려면 헬퍼함수를 사용하면 됩니다.

declare let hasMiddle: boolean;
const firstLast = {first: 'Harry', last: 'Truman'};
function addOptional<T extends object, U extends object>(
  a: T, b: U | null
): T & Partial<U> {
  return {...a, ...b};
}

const president = addOptional(firstLast, hasMiddle ? {middle: 'S'} : null);
president.middle;

아이템 24) 일관성 있는 별칭 사용하기

  • 별칭은 타입스크립트가 타입을 좁히는 것을 방해합니다. 따라서 변수에 별칭을 사용할 때는 일관되게 사용해야 합니다.
  • 비구조화 문법을 사용해서 일관된 이름을 사용하는 것이 좋습니다.
  • 함수 호출이 객체 속성의 타입 정제를 무효화할 수 있다는 점을 주의해야 합니다. 속성보다 지역변수를 사용하면 타입 정제를 믿을 수 있습니다.

출처

<이펙티브 타입스크립트> (댄 밴더캅 지음, 장원호 옮김, 인사이트, 2021)

profile
what doesn't kill you makes you stronger

0개의 댓글