본문 바로가기
FrontEnd/TypeScript

[TS] 타입스크립트 Utility types - Exclude, Omit

by 위그든씨 2023. 7. 17.

Exclude, Omit - TS에서 제공하는 type 변형을 유연하게 도와주는 타입들

Exclude<T, U>

Exclude from T those types that are assignable to U. (typescript 2.8 릴리즈)

Exclude<Type, ExcludedUnion> => union type에서 제외된 타입들에 대한 새로운 타입을 정의함

type MyUnion = string | number | boolean;

type ExcludeNumber = Exclude<MyUnion, number>;

const value: ExcludeNumber = 'hello'; // value can only be of type string or boolean

 

Omit<Type, Keys>

TypeScript 3.5 introduces the new Omit helper type, which creates a new type with some properties dropped from the original. (typescript 3.5 릴리즈)

Omit 은 어떤 정의된 객체 형태의 타입에서 특정한 프로퍼티들을 제외시켜 줌

type Person = {
  name: string;
  age: number;
  address: string;
};

type PersonWithoutAddress = Omit<Person, 'address'>;

const person: PersonWithoutAddress = {
  name: 'John Doe',
  age: 25,
};

만약 원래 정의된 타입에서 특정 key에 대한 타입을 재정의 한 뒤 사용하고 싶다면

import { User } from "@prisma/client";

export type SafeUser = Omit<
    User,
    "createdAt" | "updatedAt" | "emailVerified"
> & {
    emailVerified: string | null;	//기존에는 DateTime 이었음
    createdAt: string;
    updatedAt: string;
};

요약하자면, Exclude는 union type들로부터 제외된 타입들을 사용하고 

Omit은 existing type들로부터 생략된 속성들을 사용함