Extract, Pick

nearworld·2023년 2월 2일
0

typescript

목록 보기
19/28

Extract<Type, Union>

type Machine = {
  size: number;
  name: string;
  kind: string;
  maker: string;
}
const getData = (target: 'kind' | 'maker') => {
  if (target === 'kind') // ...
  if (target === 'maker') // ...
};

위 코드의 target 타입을 보면 유니온 타입이 명시적으로 지정되어 있으나 Machine 타입과는 전혀 관련이 없는 독립적인 타입으로 Machine 타입에 변경이 생겼을 경우에도 개발자가 일일이 찾아서 유니온 타입을 변경해줘야한다. 타입 체커는 개별 타입으로 인식해 에러를 일으키지 않을 것이다.

const getData = (target: Extract<Machine, 'kind' | 'maker'>) => {
  if (target === 'kind') // ...
  if (target === 'maker') // ...
};

위 코드는 Extract라는 유틸리티 타입을 사용하여 Machine타입으로부터 유니온 타입을 추출해내고 있다. Machine 타입이 변경된다면 타입 체커는 없는 타입을 추출하고 있다고 에러를 일으킬 것이다. 이 부분에서 코드의 일관성이 생기고 개발 유지보수 효율성이 증가하게 된다.

출처
https://www.typescriptlang.org/docs/handbook/utility-types.html#extracttype-union

Pick<Type, Union>

type PickedType = Pick<Machine, 'kind' | 'maker'>;
{
  kind: string;
  maker: string;
}

Pick 유틸리티 타입을 쓸 경우에는 유니온 타입을 가지고 Machine 타입에서 객체 형태의 타입으로 만들어주므로 유니온 타입을 생성하는 Extract 타입과 다르다.

profile
깃허브: https://github.com/nearworld

0개의 댓글