μ‹œμž‘ν•˜λ©°

Typescript 3.5 λ²„μ „μ—μ„œ Omitμ΄λΌλŠ” ν—¬νΌνƒ€μž…μ΄ μΆ”κ°€λ˜μ—ˆλ‹€. Omit은 λΉΌλ‹€ λΌλŠ” λœ»μ„ κ°€μ§€κ³  μžˆλ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ Utility Types 에 보면 Omit 외에도 μ—¬λŸ¬ κ°€μ§€ νƒ€μž…μ΄ μžˆλŠ”λ°,

  • Exclude<Type, ExcludedUnion>

Type νƒ€μž…μ—μ„œ ExcludedUnion νƒ€μž…μ„ μ œκ±°ν•œ μƒˆλ‘œμš΄ νƒ€μž…μ„ λ§Œλ“œλŠ” νƒ€μž…μ΄λ‹€.

type T = Exclude<"a" | "b" | "c", "a">;
type T = "b" | "c";
  • Pick<Type, Keys>

Type(Todo)μ—μ„œ ν‚€ 속성 μ§‘ν•©(λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ λ˜λŠ” λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ μ‘°ν•© -> title, completed)을 μ„ νƒν•˜μ—¬ μƒˆλ‘œμš΄ μœ ν˜•μ„ μƒμ„±ν•œλ‹€.

interface Todo {
  title: string;
  description: string;
  completed: boolean;
}

type TodoPreview = Pick<Todo, "title" | "completed">

const todo: TodoPreview = {
  title: 'Clean room',
  completed: false,
}

Omit<Type, Keys>

Typeμ—μ„œ λͺ¨λ“  속성을 μ„ νƒν•œ λ‹€μŒ Keys(λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ λ˜λŠ” λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ˜ μ‘°ν•©)을 μ œκ±°ν•˜μ—¬ μƒˆλ‘œμš΄ μœ ν˜•μ„ μƒμ„±ν•œλ‹€.

type TodoPreviw = Omit<Todo, "description">;

const todo: TodoPreviw = {
  title: 'Clean room',
  completed: false,
}

infer

Typescript infer ν‚€μ›Œλ“œλŠ” 쑰건식에 따라 참일 경우 μ‚¬μš©ν•  수 μžˆλ‹€. Element<number> extends Element<infer U>와 같은 νƒ€μž…μ΄ μžˆλ‹€κ³  ν–ˆμ„ λ•Œ, Uνƒ€μž…μ€ number둜 μΆ”λ‘ (infer)ν•  수 μžˆλ‹€.

마치며

νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό 처음 μ‚¬μš©ν•  λ•Œ 일일이 μ„ μ–Έν•΄μ€˜μ•Όν•œλ‹€λŠ” λ²ˆκ±°λ‘œμ›€μ΄ μžˆμ—ˆλŠ”λ° μ—¬λŸ¬ ν—¬νΌνƒ€μž…μœΌλ‘œ νƒ€μž…μ„ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ λ°œμ „ν•˜κ³  μžˆλ‹€. λ‹€λ₯Έ ν—¬νΌνƒ€μž…λ“€λ„ 곡뢀해두면 μ—¬λŸ¬ 번 μ„ μ–Έλ˜λŠ” 것을 막을 수 μžˆμ„ 것 κ°™λ‹€.

Refer

https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys
https://www.youtube.com/watch?v=yhxF6ycENlg