Notice
Recent Posts
Recent Comments
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Link
관리 메뉴

개발블로그

TypeScript - 유틸리티 타입 본문

TypeScript

TypeScript - 유틸리티 타입

춘식스 2022. 5. 27. 14:52

keyof

interface User8 {
  id: number;
  name: string;
  age: number;
  gender: "m" | "f";
}

type UserKey9 = keyof User8; // 'id' | 'name' | 'age' | 'gender'

// const uk: UserKey9; // Error
const uk: UserKey9 = "name";
// UserKey9 안에 키값중에 하나를 입력하면 에러가 안난다.

partial<T>

프로퍼티를 모두 옵셔널로 바꿔준다.
일부만 사용이 가능하다.
interface User7 {
  id: number;
  name: string;
  age: number;
  gender: "m" | "f";
}

// Error
/*
let admin: User7 = {
  id: 1,
  name: "Bob"
}
*/

let admin: Partial<User7> = {
  id: 1,
  name: "Bob"
}
// User7과 동일한것
// User7 안에 없을 걸 적으면 에러가 난다.

Required<T>

모든 프로퍼티를 필수로 바꿔준다.
interface User6 {
  id: number;
  name: string;
  age?: number;
}

/*
let admin2: User6 = {
  id: 1,
  name: "Bob"
}
*/
// User6 안에 age가 필수가 아니기 때문에 에러가 안난다.

let admin2: Required<User6> = {
  id: 1,
  name: "Bob",
  age: 30
}
// 모든 프로퍼티가 필수로 바뀌었기 때문에
// age도 필수가 되어서 안적으면 에러가 난다.

Readonly<T>

읽기 전용으로 바꿔준다.
interface User5 {
  id: number;
  name: string;
  age?: number;
}

let admin3: Readonly<User5> = {
  id: 1,
  name: "Bob"
}

// admin3.id = 4; // Error

Record<K, T>

  • K = key
  • T = type
/*
interface Score9 {
  '1': 'A' | 'B' | 'C' | 'D';
  '2': 'A' | 'B' | 'C' | 'D';
  '3': 'A' | 'B' | 'C' | 'D';
  '4': 'A' | 'B' | 'C' | 'D';
}
*/

type Grade = '1' | '2' | '3' | '4';
type Score9 = 'A' | 'B' | 'C' | 'D';

// const score: Record<'1' | '2' | '3' | '4', 'A' | 'B' | 'C' | 'D'> = {
const score: Record<Grade, Score9> = {
  1: 'A',
  2: 'B',
  3: 'D',
  4: 'C'
}
// '1' | '2' | '3' | '4' = key
// 'A' | 'B' | 'C' | 'D' = type

Pick<T, K>

특정 프로퍼티만 가져와서 사용할 수 있다.
  • T = type
  • K = 프로퍼티
interface User4 {
  id: number;
  name: string;
  age: number;
  gender: 'M' | 'W'
}

const admin4: Pick<User4, 'id' | 'name'> = {
  id: 1,
  name: 'Bob'
}
// User4에서 id, name만 가져와서 사용할 수 있다.

Omit<T, K>

특정 프로퍼티를 생략하고 사용할 수 있다.
  • T = type
  • K = 프로퍼티
interface User3 {
  id: number;
  name: string;
  age: number;
  gender: 'M' | 'W'
}

const admin5: Omit<User3, 'age' | 'gender'> = {
  id: 1,
  name: 'Bob'
}
// User3에서 age, gender를 빼고 사용하겠다.

Exclude<T1, T2>

T1에서 T2를 제외하고 사용한다.
  • T1 = type1
  • T2 = type2
type T1 = string | number;
type T2 = Exclude<T1, number>;
// T2는 타입이 string밖에 없다.

// NonNullable<Type>

// null을 제외한 타입을 생성
// null 뿐만 아니라 undefined도 같이 제외시킨다.

type T3 = string | null | undefined | void;
type T4 = NonNullable<T3>;
// T4는 string와 void만 남아있다.

 

'TypeScript' 카테고리의 다른 글

TypeScript - Union Types & 교차 타입  (0) 2022.05.27
TypeScript - Literal Types  (0) 2022.05.27
TypeScript - Class  (0) 2022.05.27
TypeScript - Generics  (0) 2022.05.27
TypeScript - Type Alias  (0) 2022.05.27
Comments