[TypeScript] 유틸리티 클래스

Dae-Hee·2022년 12월 9일
0

Typescript Study

목록 보기
10/11
post-thumbnail

자주 쓰이는 타입스크립트 유틸리티 클래스 정리


▪︎ Partial< T >

T의 모든 프로퍼티를 선택적(Optional 형태)으로 만드는 타입을 구성
type Partial<T> = { [P in keyof T]?: T[P];};

interface User {
  name: string;
  age: number;
}

type PartialUser = Partial<User>;

interface OptionalUser = {
  name?: string;
  age?: number;
}
위 타입 PartialUser, 인터페이스 OptionalUser 동일

▪︎ Readonly< T >

T의 모든 프로퍼티를 읽기 전용(readonly)으로 설정
type Readonly<T> = { readonly [P in keyof T]: T[P];};

interface Todo {
  title: string;
}

const todo: Readonly<Todo> = {
  title: 'Delete inactive users',
};

todo.title = 'Hello'; 
// 오류: 읽기 전용 프로퍼티에 재할당할 수 없음

▪︎ Require< T >

Partial와 반대로 T의 모든 프로퍼티를 선택적(Optional 형태)를 제거
type Required<T> = {
  [P in keyof T]-?: T[P];
};


▪︎ Record<K,T>

K타입을 Key값 타입으로, T타입을 value 값 타입 리턴
타입의 프로퍼티들을 다른 타입에 매핑시키는 데 사용될 수 있다.
type Record<K extends keyof any, T> = {
  [P in K]: T;
};

interface User {
  id: number;
  age?: number;
}

type Member = 'jo' | 'kim';

const members: Record<Member, User> = {
  jo: { 
    id: 1
    age: 29
  },
  kim: { 
    id: 2
  },
};

▪︎ Pick<T,K>

T 타입으로부터 K 프로퍼티만 추출
type Pick<T, K extends keyof T> = {
  [P in K]: T[P];
};

interface User {
  id: number;
  name: string;
  age: number;
}

type UserName = Pick<User, 'id' | 'name'>;

const jo: UserName = {
  id: 1,
  name: 'jo',
};

▪︎ Omit<T,K>

Pick와 반대로 T타입으로부터 K프토퍼티를 제거
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

interface User {
  id: number;
  name: string;
  age: number;
}

type UserName = Omit<User, 'age'>;

const jo: UserName = {
  id: 1,
  name: 'jo',
};


Reference

0개의 댓글