TypeScript 유틸리티 타입(Partial, Pick, Omit 등) 실무 적용법 (18강)
TypeScript 유틸리티 타입(Partial, Pick, Omit 등) 실무 적용법 (18강)
**TypeScript**는 강력한 **타입 시스템**을 제공하며, 그 중 **유틸리티 타입**은 타입 변형을 간편하게 할 수 있도록 돕는 유용한 기능입니다. **Partial**, **Pick**, **Omit**과 같은 유틸리티 타입을 활용하면 복잡한 타입 변환을 손쉽게 처리할 수 있습니다. 이번 강의에서는 **TypeScript 유틸리티 타입**의 개념을 이해하고, 이를 **실무 프로젝트**에서 어떻게 활용할 수 있는지에 대해 알아보겠습니다.
TypeScript 유틸리티 타입이란?
**유틸리티 타입**은 **TypeScript**에서 제공하는 내장 타입으로, 특정 타입을 변형하거나 처리하는 데 유용한 도구입니다. 이 타입들은 복잡한 타입을 다룰 때 **코드의 간결성**과 **재사용성**을 높여주며, 특히 **타입 추론**을 개선하고, **동적 타입 변환**을 손쉽게 처리할 수 있습니다.
주로 사용되는 **유틸리티 타입**에는 **`Partial`**, **`Pick`**, **`Omit`** 등이 있습니다. 각 타입은 **기존 타입을 변형**하거나 **일부 속성을 추출**하는 데 유용하게 사용됩니다.
1. Partial: 일부 속성을 선택적으로 만들기
**`Partial
Partial 예제
interface User {
id: number;
name: string;
email: string;
}
function updateUser(id: number, user: Partial) {
// 사용자가 전달한 부분적인 값만 업데이트
console.log(id, user);
}
updateUser(1, { name: "John Doe" }); // name만 업데이트
updateUser(2, { email: "newemail@example.com" }); // email만 업데이트
위 예제에서 **Partial
2. Pick: 일부 속성만 추출하기
**`Pick
Pick 예제
interface User {
id: number;
name: string;
email: string;
}
type UserName = Pick;
const user: UserName = { name: "Alice" }; // name만 추출
위 예제에서 **Pick
3. Omit: 일부 속성 제외하기
**`Omit
Omit 예제
interface User {
id: number;
name: string;
email: string;
}
type UserWithoutEmail = Omit;
const user: UserWithoutEmail = { id: 1, name: "Bob" }; // email 속성 제외
위 예제에서 **Omit
4. 다른 유틸리티 타입들
TypeScript에서는 **Partial**, **Pick**, **Omit** 외에도 다양한 유틸리티 타입들이 존재합니다. 이들을 잘 활용하면, 복잡한 타입 변환 작업을 더욱 효율적으로 처리할 수 있습니다.
1) Required
**`Required
interface User {
id: number;
name?: string;
email?: string;
}
type RequiredUser = Required;
const user: RequiredUser = { id: 1, name: "Alice", email: "alice@example.com" }; // 모든 속성이 필수
2) Readonly
**`Readonly
interface User {
id: number;
name: string;
}
type ReadonlyUser = Readonly;
const user: ReadonlyUser = { id: 1, name: "Alice" };
// user.name = "Bob"; // 오류: 읽기 전용 속성은 수정할 수 없습니다.
3) Exclude / Extract
**`Exclude
type MyType = Exclude<"a" | "b" | "c", "a">; // "b" | "c"
type MyType2 = Extract<"a" | "b" | "c", "a" | "b">; // "a" | "b"
5. 실무에서 유틸리티 타입 활용하기
**TypeScript 유틸리티 타입**을 활용하면 복잡한 타입을 간단하게 변형할 수 있어, **실무 프로젝트**에서 매우 유용하게 사용됩니다. 예를 들어, **API 요청/응답 객체**를 처리할 때, **Partial**을 사용하여 **선택적인 속성**을 처리하거나, **Pick**과 **Omit**을 사용하여 **특정 속성만 추출하거나 제외**할 수 있습니다.
실무 예제: API 응답 데이터 처리
interface User {
id: number;
name: string;
email: string;
}
interface ApiResponse {
data: T;
error?: string;
}
type UserResponse = ApiResponse;
const userApiResponse: UserResponse = {
data: { id: 1, name: "Alice", email: "alice@example.com" },
};
function getUserData(response: ApiResponse>) {
if (response.error) {
console.log("Error:", response.error);
} else {
console.log("User data:", response.data);
}
}
getUserData({ data: { name: "Alice" } }); // 이름만 포함된 응답
위 예제에서는 **Partial**을 활용하여 **API 응답 데이터**에서 **일부 속성만 포함된 객체**를 처리하고 있습니다. **Omit**을 사용하여 특정 속성을 제외하거나, **Pick**을 사용하여 필요한 데이터만 추출하는 방식으로 유틸리티 타입을 적극적으로 활용할 수 있습니다.
결론
**TypeScript 유틸리티 타입**은 **타입 변형**을 간편하게 할 수 있는 유용한 도구로, **대규모 프로젝트**에서 코드의 **유연성**과 **유지보수성**을 높이는 데 큰 도움이 됩니다. **Partial**, **Pick**, **Omit**을 비롯한 다양한 유틸리티 타입을 실무에서 적절히 활용하여, 코드의 복잡도를 줄이고 가독성을 높일 수 있습니다. 이 강의를 통해 유틸리티 타입을 **효율적으로 활용**하는 방법을 익히고, 프로젝트에 적용해 보세요.