Ted's Codding study
Intersection 타입 본문
TypeScript
Intersection 타입 Ted93 2024. 6. 16. 19:00
1. Intersection 타입이란?
- 여러 타입을 하나로 결합하여 모든 타입의 기능을 갖춘, 단일 타입을 생성하는 방법
- 여러 타입을 모두 만족하는 하나의 타입
- AND 연산자 (A 그리고 B) - & 기호를 사용하여 구현
2. Intersection 타입 사용
- type IntersectionType = Type1 & Type2 & Type3;
type Employee = {
name: string;
startDate: Date;
};
type Manager = {
name: string;
startDate: Date;
group: string; // 부서명
};
- 위에 코드에서 name과 startDate가 중복이 됨
- 아래 처럼 Intersection 타입을 활용할 수 있음
type Manager = Employee & { group: string };
let managerA: Manager = {
name: '테드',
startDate: new Date(),
group: 'developer',
};
3. 인터섹션 타입의 특징
3-1) 타입 결합
- 여러 타입의 속성을 결합하여 새로운 타입을 생성
- 코드의 재사용성과 복잡한 타입의 조합 가능
3-2) 유연성과 정확성
- 필요한 모든 타입의 속성을 조합
- 유연하면서도 정확한 타입 정의 가능
4. 인터섹션 타입 예시
type Admin = {
isAdmin: boolean;
};
// 일반 사용자
type User = {
id: string;
password: string;
};
// 관리 사용자
type AdminUser = User & Admin;
function createAdminUser(user: User): AdminUser {
return { ...user, isAdmin: true };
// 스프레드 연산자를 사용하는 새로운 객체 생성
}
let newAdminUser: User = {
id: 'qwe123',
password: 'qwe123!',
};
let adminUser1 = createAdminUser(newAdminUser);
console.log(adminUser1); // { id: 'qwe123', password: 'qwe123!', isAdmin: true }
문제1
기본 Intersection 타입 생성
Person 타입과 ContactDetails 타입을 결합하여 Employee 타입을 생성
Employee 타입은 Person의 모든 속성(name, age)과 ContactDetails의 모든 속성(email, phone)을 포함
정답
type Person = { name: string; age: number };
type ContactDetails = { email: string; phone: string };
type Employee = Person & ContactDetails;
let employee1: Employee = {
name: '테드',
age: 99,
email: 'ted@ted.com',
phone: '010-1234-5678',
};
문제 2
함수 반환 타입으로 Intersection 사용
Vehicle 타입과 Engine 타입을 결합하여 Car 타입 생성
createCar 함수를 구현하여, 주어진 Vehicle과 Engine 정보를 받아 Car 객체를 반환하도록 구현
정답
type Vehicle = {
make: string;
model: string;
};
type Engine = {
engineType: string;
horsepower: number;
};
type Car = Vehicle & Engine;
function createCar(vehicle: Vehicle, engine: Engine): Car {
return { ...vehicle, ...engine };
}
let v1: Vehicle = {
make: 'Kia',
model: 'K5',
};
let engine: Engine = {
engineType: 'hybrid',
horsepower: 100,
};
const newCar = createCar(v1, engine);
console.log(newCar);
// { make: 'Kia', model: 'K5', engineType: 'hybrid', horsepower: 100 }
문제 3
복잡한 Intersection 타입 활용
TeamMember 타입과 Project 타입을 결합하여 TeamMemberWithProject 타입을 생성
해당 타입을 사용해 assignProjectToTeamMember 함수를 구현
함수는 TeamMember 객체와 Project 정보를 받아서, 이를 결합한 TeamMemberWithProject 객체를 반환
정답
type TeamMember = {
memberId: string;
name: string;
};
type Project = {
projectId: string;
projectName: string;
};
type TeamMemberWithProject = TeamMember & Project;
function assignProjectToTeamMember(
teamMember: TeamMember,
project: Project,
): TeamMemberWithProject {
return { ...teamMember, ...project };
}
노션으로 보고 싶다면?
https://short-echidna-b16.notion.site/Intersection-46e8435b73d34a86b4aca4a004938a67?pvs=4