Intro
μλ νμΈμ. μ΄λ² μκ°μλ νμ μ€ν¬λ¦½νΈ μ νΈλ¦¬ν° νμ μΈ Omitμ λν΄ μμλ³΄κ² μ΅λλ€.
μ°Έκ³ λ‘ μ νΈλ¦¬ν° νμ (Utility Types)μ TypeScriptμμ κΈ°μ‘΄ νμ μ λ³ννκ±°λ νμ₯νμ¬ μλ‘μ΄ νμ μ μ½κ² μμ±ν μ μλλ‘ λμμ£Όλ λ΄μ₯ νμ λ€μ λλ€. TypeScriptλ κ°λ ₯ν νμ μμ€ν μ μ 곡νλ λμμ, 볡μ‘ν νμ μ μλ₯Ό λ¨μννκΈ° μν΄ μ¬λ¬ κ°μ§ μ νΈλ¦¬ν° νμ μ μ 곡ν©λλ€. μ΄ νμ λ€μ νΉμ ν μμ (μ: μ νμ νλλ‘ λ³ν, νΉμ μμ± μ κ±° λ±)μ μννκΈ° μν 미리 μ μλ ν νλ¦Ώμ²λΌ μλν©λλ€.
Omit κΈ°λ³Έ λ¬Έλ²
Omitμ TypeScriptμμ μ 곡νλ μ νΈλ¦¬ν° νμ μ€ νλλ‘, νΉμ κ°μ²΄ νμ μμ μ§μ λ ν€λ₯Ό μ κ±°ν μλ‘μ΄ νμ μ μμ±νλ λ° μ¬μ©λ©λλ€. μ΄ μ νΈλ¦¬ν° νμ μ κ°μ²΄μ μΌλΆ νλ‘νΌν°λ₯Ό μ μΈν λλ¨Έμ§λ‘ μλ‘μ΄ νμ μ μ μν λ λ§€μ° μ μ©ν©λλ€.
Omit<Type, Keys>
- Type: κΈ°μ‘΄ κ°μ²΄ νμ
- Keys: μ μΈνκ³ μ νλ νλ‘νΌν°(ν€)λ€μ μ§ν©. λ¬Έμμ΄ λ¦¬ν°λ΄μ΄λ μ λμ¨ νμ μΌλ‘ μ§μ ν©λλ€.
Omit λμ λ°©μ
Omitμ κΈ°λ³Έμ μΌλ‘ λ€μκ³Ό κ°μ΄ ꡬνλμ΄ μμ΅λλ€. Omitμ κΈ°μ‘΄ νμ μμ νΉμ ν€λ₯Ό μ μΈν μλ‘μ΄ νμ μ λ°νν©λλ€.
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
- keyof T: T νμ μ λͺ¨λ ν€λ₯Ό κ°μ Έμ΅λλ€.
- Exclude<keyof T, K>: Kμ ν΄λΉνλ ν€λ₯Ό μ μΈν λλ¨Έμ§ ν€λ₯Ό κ°μ Έμ΅λλ€.
- Pick<T, ...>: νΉμ ν€λ€λ§ μ ννμ¬ μλ‘μ΄ νμ μ λ§λλλ€.
Omit Example
1. κ°λ¨ν μ¬μ©
interface User {
id: number;
name: string;
email: string;
age: number;
}
type UserWithoutEmail = Omit<User, "email">;
const user: UserWithoutEmail = {
id: 1,
name: "John",
age: 30,
};
2. μ¬λ¬ ν€ μ μΈνκΈ°
type UserWithoutSensitiveInfo = Omit<User, "email" | "age">;
const user2: UserWithoutSensitiveInfo = {
id: 2,
name: "Alice",
};
μ€μ©μ μΈ νμ© μ¬λ‘
1. API μλ΅ νν°λ§: λ―Όκ°ν λ°μ΄ν°λ₯Ό μ μΈν κ°μ²΄ νμ μ μ μν λ μ¬μ©
type SafeUser = Omit<User, "email" | "password">;
2. μ»΄ν¬λνΈ Props κ΄λ¦¬: νΉμ μ»΄ν¬λνΈμμ μΌλΆ Propsλ₯Ό μ μΈν μλ‘μ΄ Props νμ μμ±
interface ButtonProps {
onClick: () => void;
color: string;
disabled: boolean;
}
type ButtonWithoutOnClick = Omit<ButtonProps, "onClick">;
3. Redux μ‘μ λ°μ΄ν°μμ λΆνμν νλ μ κ±°
type ActionPayload = Omit<User, "id">;
Omitμ κΈ°μ‘΄ νμ μμ νΉμ ν€λ₯Ό μ κ±°νμ¬ μλ‘μ΄ νμ μ μ μνλ λ° μ΅μ νλ μ νΈλ¦¬ν° νμ μ λλ€. λ°μ΄ν° νν°λ§, νμ κ΄λ¦¬, Props μ μ λ± λ€μν μν©μμ νμ©λ μ μμ΄ TypeScript κ°λ°μμ λ§€μ° μ μ©ν©λλ€ :)