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
타입과 다르다.