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 ๊ฐ๋ฐ์์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค :)