Exclude
타입은 첫 번째 인자로 전달된 유니온 타입 Type에서 두 번째 인자로 전달된 유니온 타입 ExcludedUnion에 속하는 타입들을 제외한 타입을 생성한다. Omit
과의 차이점으로는, Omit
은 객체의 속성을 제외하고자 할 때 사용되고, Exclude
는 유니온 타입에서 특정 값을 제외하고자 할 때 사용된다.
type Grade = 'A' | 'B' | 'C' | 'D' | 'E';
type ExcludedGrade = Exclude<Grade, 'A' | 'B'>; // 'A', 'B'는 제외
const grade: ExcludedGrade = 'C'; // 'C', 'D', 'E'만 선택 가능
Extract
타입은 첫 번째 인자로 전달된 유니온 타입 Type에서 두 번째 인자로 전달된 유니온 타입 Union에 속하는 타입들만 추출하여 새로운 타입을 생성한다. Exclude
와는 반대이다.
type MyType = Extract<'a' | 'b' | 'c', 'a' | 'b'>;
// 결과: type MyType = "a" | "b"
Extract
는 유니언 타입에서 특정 타입을 추출하는 역할을 한다. 객체의 속성을 추출하려고 할 때, Extract는 해당 객체 타입을 추출하지 않으며, 원본 그대로 유지됩니다. 객체의 특정 속성을 추출하려면 Pick 유틸리티 타입을 사용해야 한다.
type MyType = { prop1: string; prop2: number; prop3: boolean };
// 객체의 특정 속성을 추출하려면 Pick을 사용해야 함
type PickedType = Pick<MyType, 'prop1'>;
const value: PickedType = {
prop1: 'hello'
};
const otherValue: PickedType = {
prop1: 'hi',
};
<T>
NonNullable
타입은 주어진 타입 Type에서 null
과 undefined
를 제외한 모든 타입을 유지시키는 기능이다.
type AllPossibleGrades = 'Dave' | 'John' | null | undefined;
type NamesOnly = NonNullable<AllPossibleGrades> // null과 undefined가 제외됨
const value: NamesOnly = null; // error