⌨️ conceptualization/Typescript

μœ ν‹Έλ¦¬ν‹° νƒ€μž…(Utilty Types)

awesomeyelim 2022. 9. 12. 16:12
728x90

 

πŸ”₯ typescriptμ—μ„œ λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©λ˜λŠ” utility type에 λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄μž

1. keyof 
2. Partial<T>
3. Required<T>
4. Readonly<T>
5. Record<K,T>
6. Pick<T,K>
7. Omit<T,K>
8. Exclude<T1,T2>
9. NonNullable<Type>

 

 

1. keyof νƒ€μž…

πŸ‘‰πŸ» 객체의 key 값을 μΆ”μΆœν•œλ‹€
interface User {
  id: number;
  name: string;
  age: number;
  gender: "m" | "f";
}

type UserKey = keyof User; 
// πŸ“Œ λ‹€μŒκ³Ό 같은 ν‚€ 값을 λ‚˜νƒ€λ‚Έλ‹€
// 'id' | 'name'| 'age'| 'gender'

const uk: UserKey = "name";
// πŸ“Œ name κ³Ό 같은 UserKey ν”„λ‘œνΌν‹° 값이 λ“€μ–΄κ°€μ§€ μ•ŠμœΌλ©΄ errorκ°€ λ°œμƒν•œλ‹€.

 

 

 

2. Partial

πŸ‘‰πŸ» partial은 ν”„λ‘œνΌν‹°λ₯Ό λͺ¨λ‘ μ˜΅μ…˜μœΌλ‘œ λ°”κΏ”μ€€λ‹€.

μ˜ˆμ‹œλΉ„κ΅

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

// πŸ“Œ User νƒ€μž…λ‚΄μ˜ ν”„λ‘œνΌν‹° 값이 μΌλΆ€λ§Œ λ“€μ–΄κ°”μŒμœΌλ‘œ errorκ°€ λ°œμƒν•œλ‹€
let admin: User = {
    id: 1,
    name: "yelim",
}

❓ μ΄λŸ΄λ•Œ partial을 μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•΄λ³΄μž

let admin: Partial<User> = {
  id: 1,
  name: "yelim",
};

// πŸ“Œ User νƒ€μž…μ„ Partial<User> 처럼 κ°μŒŒλ‹€λŠ” 것은 λ‹€μŒκ³Ό 같은 μ˜λ―Έμ΄λ‹€.

// interface User {
//   id?: number;
//   name?: string;
//   age?: number;
//   gender?: "m" | "f";
// }

 

 

 

3. Required

πŸ‘‰πŸ» (partial 와 λ°˜λŒ€κ°œλ…) λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό ν•„μˆ˜ κ°’μœΌλ‘œ λ°”κΏ”μ€€λ‹€.

μ˜ˆμ‹œλΉ„κ΅

interface User {
  id: number;
  name: string;
  age?: number; // πŸ“Œ ageλŠ” optional κ°’μœΌλ‘œ errorκ°€ λ‚˜μ§€μ•ŠλŠ”λ‹€.
}

let admin: User = {
  id: 1,
  name: "yelim",
};
  • ν•˜μ§€λ§Œ Required<User> 둜 κ°μ‹Έκ²Œ λœλ‹€λ©΄ ?
interface User {
  id: number;
  name: string;
  age?: number; 
}

let admin: Required<User> = { // πŸ“Œ optional κ°’μ΄μ—ˆλ˜ age ν”„λ‘œνΌν‹°κ°€ ν•„μˆ˜ 값이 되며 error messageκ°€ λ°œμƒν•œλ‹€.
  id: 1,
  name: "yelim"
};

 

 

 

 

4. Readonly

πŸ‘‰πŸ» 읽기 μ „μš©μœΌλ‘œ λ°”κΏ”μ€€λ‹€.
interface User {
  id: number;
  name: string;
  age?: number;
}

let admin: Readonly<User> = {
  id: 1,
  name: "yelim",
};

admin.id = 10; // πŸ“Œ 읽기 μ „μš© ν”„λ‘œνΌν‹° id 값은 μˆ˜μ •ν•  수 μ—†λ‹€.

 

 

 

5. Record<K,T>

πŸ‘‰πŸ» Record<K,T> μ—¬κΈ°μ„œ KλŠ” key 이고, TλŠ” type이닀.

μ˜ˆμ‹œλΉ„κ΅

  • λ‹€μŒκ³Ό 같은 μ˜ˆμ œκ°€ μžˆλ‹€.
interface Score {
  "1": "A" | "B" | "C" | "D";
  "2": "A" | "B" | "C" | "D";
  "3": "A" | "B" | "C" | "D";
  "4": "A" | "B" | "C" | "D";
}

const score: Score = {
  1: "A",
  2: "B",
  3: "C",
  4: "D",
};
  • μ—¬κΈ°μ„œ Record<K,T> λ₯Ό ν™œμš©ν•΄ 보면..
// πŸ“Œ λ‹€μŒκ³Ό 같이 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C" | "D"> = {
  1: "A",
  2: "B",
  3: "C",
  4: "D",
};
  • μ’€ 더 μ •λ¦¬ν•΄μ„œ λ‚˜νƒ€λ‚΄λ³΄μž !
type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C" | "D";

const score: Record<Grade, Score> = {
  1: "A",
  2: "B",
  3: "C",
  4: "D",
};

λ‹€λ₯Έ ν™œμš© 예제

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

function isValid(user: User) {
  const result: Record<keyof User, boolean> = {
    // πŸ“Œ User의 킀값을 μ°Έμ‘°, Record<K,T>λ₯Ό ν™œμš©ν•˜μ—¬ λ‹€μŒκ³Ό 같이 λ‚˜νƒ€λ‚Όμˆ˜ μžˆλ‹€.
    id: user.id > 0,
    name: user.name !== "",
    age: user.age > 0,
  };
  return result;
}

 

 

 

6. Pick<T,K>

πŸ‘‰πŸ» Pick<T,K> T νƒ€μž…μ—μ„œ K ν”„λ‘œνΌν‹°λ§Œ κ³¨λΌμ„œ μ‚¬μš©ν•œλ‹€.
interface User {
  id: number;
  name: string;
  age: number;
  gender: "m" | "w";
}

const admin: Pick<User, "id"| "name"> = {
  id: 0,
  name: "bob",
};

 

 

 

7. Omit<T,K>

πŸ‘‰πŸ» Pick<T,K>κ³Ό λ°˜λŒ€λ‘œ νŠΉμ • ν”„λ‘œνΌν‹°λ§Œ μ œμ™Έν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€.
interface User {
  id: number;
  name: string;
  age: number;
  gender: "m" | "w";
}

const admin: Omit<User, "age"| "gender"> = {
  id: 0,
  name: "bob",
};

 

 

 

8. Exclude<T1,T2>

πŸ‘‰πŸ» Exclude<T1,T2> T1 μ—μ„œ T2λ₯Ό μ œμ™Έν•˜κ³  μ‚¬μš©ν•˜λŠ” 것
type T1 = string | number | boolean;
type T2 = Exclude<T1, number>; // πŸ“Œ T2λŠ” number이 μ œμ™Έλ˜κ³  string κ³Ό boolean만 λ‚¨κ²Œ λœλ‹€.

 

 

 

 

9. NonNullable

πŸ‘‰πŸ» Null 을 μ œμ™Έν•œ νƒ€μž…μ„ μƒμ„±ν•œλ‹€.(undefined도 ν•¨κ»˜ μ œμ™Έ μ‹œν‚¨λ‹€.)
type T1 = string | null | undefined | void;
type T2 = NonNullable<T1> // πŸ“Œ T2λŠ” string κ³Ό void 만 λ‚¨κ²Œ λœλ‹€.

 

 

 

 

πŸ“š μ°Έκ³  )

https://www.typescriptlang.org/docs/handbook/utility-types.html
https://www.youtube.com/watch?v=IeXZo-JXJjc&list=PLZKTXPmaJk8KhKQ_BILr1JKCJbR0EGlx0&index=8