Typescript π€π»
μμνλ©°
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