[Daily morning study] TypeScriptμ Utility Types (Partial, Pick, Omit λ±)
#daily morning study
TypeScriptμ Utility Types
TypeScriptλ κ°λ°μκ° λμ± ν¨μ¨μ μΌλ‘ μ½λ μμ±ν μ μκ² λλ μ¬λ¬ λ€μν μ νΈλ¦¬ν° νμ
μ μ 곡ν©λλ€. μ΄ κ°μ΄λμμλ Partial, Pick, Omit, Record, Exclude, Extractμ κ°μ μ£Όμ μ νΈλ¦¬ν° νμ
μ λν΄ μ€λͺ
νκ² μ΅λλ€.
1. Partial
Partial<T> νμ
μ μ£Όμ΄μ§ νμ
Tμ λͺ¨λ νλ‘νΌν°λ₯Ό μ νμ (optional)μΌλ‘ λ§λ€μ΄ μ€λλ€. μ΄ μ νΈλ¦¬ν°λ νΉμ κ°μ²΄μ μΌλΆ νλ‘νΌν°λ§μ μ
λ°μ΄νΈν λ μ μ©ν©λλ€.
μμ
interface User {
id: number;
name: string;
email: string;
}
const updateUser = (id: number, userUpdates: Partial<User>) => {
// μ
λ°μ΄νΈ λ‘μ§
};
updateUser(1, { name: "μ μ΄λ¦" });
μ μ½λμμ userUpdatesλ User μΈν°νμ΄μ€μ μ νμ μΈ νλ‘νΌν°λ€λ§ ν¬ν¨ν μ μμ΅λλ€.
2. Pick<T, K>
Pick<T, K> νμ
μ μ£Όμ΄μ§ νμ
Tμμ νΉμ νλ‘νΌν° Kλ§ μ ννμ¬ μλ‘μ΄ νμ
μ μμ±ν©λλ€. μ£Όλ‘ ν° κ°μ²΄μμ μΌλΆ νλ‘νΌν°λ§ νμν κ²½μ°μ μ μ©ν©λλ€.
μμ
interface User {
id: number;
name: string;
email: string;
}
type UserPreview = Pick<User, "id" | "name">;
const user1: UserPreview = {
id: 1,
name: "μ¬μ©μ1",
};
μ μμμμλ UserPreview νμ
μ΄ User νμ
μμ idμ name νλ‘νΌν°λ§ μ νν ννμ
λλ€.
3. Omit<T, K>
Omit<T, K> νμ
μ Pickκ³Όλ λ°λλ‘, νΉμ νλ‘νΌν° Kλ₯Ό μ μΈν μλ‘μ΄ νμ
μ λ§λλλ€.
μμ
interface User {
id: number;
name: string;
email: string;
}
type UserWithoutEmail = Omit<User, "email">;
const user2: UserWithoutEmail = {
id: 2,
name: "μ¬μ©μ2",
};
μ μμμμλ UserWithoutEmail νμ
μ΄ User νμ
μμ email νλ‘νΌν°λ₯Ό μ μΈν ννμ
λλ€.
4. Record<K, T>
Record<K, T> νμ
μ μ£Όμ΄μ§ ν€ Kμ κ° Tλ₯Ό κ°μ§ κ°μ²΄ νμ
μ μμ±ν©λλ€. μ£Όλ‘ μ¬λ¬ κ°μ κ°μ΄ λμΌν νμ
μΌ λ μ μ©ν©λλ€.
μμ
type UserRoles = "admin" | "editor" | "viewer";
type RolePermissions = Record<UserRoles, string[]>;
const permissions: RolePermissions = {
admin: ["read", "write", "delete"],
editor: ["read", "write"],
viewer: ["read"],
};
μ μ½λμμλ UserRoles νμ
μ κ° μν μ λν΄ κΆνμ μ μνλ κ°μ²΄λ₯Ό μμ±νμμ΅λλ€.
5. Exclude<T, U>
Exclude<T, U>λ μ£Όμ΄μ§ νμ
Tμμ Uμ ν΄λΉνλ νμ
μ μ μΈν μλ‘μ΄ νμ
μ μμ±ν©λλ€.
μμ
type AllNumbers = number | string | boolean;
type OnlyNumbers = Exclude<AllNumbers, string | boolean>; // numberλ§ λ¨μ΅λλ€.
μ μ½λμμ OnlyNumbersλ number νμ
λ§ ν¬ν¨ν©λλ€.
6. Extract<T, U>
Extract<T, U>λ μ£Όμ΄μ§ νμ
T μ€μμ Uμ μλΈνμ
μ μΆμΆνμ¬ μλ‘μ΄ νμ
μ μμ±ν©λλ€.
μμ
type AllNumbers = number | string | boolean;
type StringOrNumber = Extract<AllNumbers, string | number>; // string | number
μ μ½λμμ StringOrNumberλ stringκ³Ό number νμ
λ§ ν¬ν¨ν©λλ€.
λ§λ¬΄λ¦¬
TypeScriptμ μ νΈλ¦¬ν° νμ λ€μ νμ κ΄λ¦¬λ₯Ό ν¨μ¬ μμνκ² λ§λ€μ΄ μ£Όλ©°, μ½λμ κ°λ μ±μ λμ΄λ λ° κΈ°μ¬ν©λλ€. μ΄λ° μ νΈλ¦¬ν° νμ λ€μ μ νμ©νλ©΄ λμ± ν¨μ¨μ μ΄κ³ μμ ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€. κ° μ νΈλ¦¬ν° νμ μ μ¬μ© μ¬λ‘μ ν¨κ» μ½λλ₯Ό μμ±ν΄λ³΄λ©° μ΅ν보μΈμ!