코드스테이츠
5.30 TypeScript의 연산자 활용 타입 유니온(Union) 타입과 인터섹션(Intersection) 포팅
스우티
2023. 5. 31. 16:07
유니온 타입
/* 코드를 작성한 뒤 터미널에 순서대로
1. tsc src/index.ts
2. node src/index.js
라고 치면 결과를 확인해볼 수 있습니다. */
function printAge(person) {
let age;
if (typeof person.age === 'number' || typeof person.age === 'string') {
age = person.age.toString();
}
console.log(`${person.name}의 나이는 ${age}살 입니다.`);
}
const kimcoding = {
name: '김코딩',
age: 30,
};
const parhacker = {
name: '박해커',
age: '서른',
};
printAge(kimcoding);
printAge(parhacker);
/* 코드를 작성한 뒤 터미널에 순서대로
1. tsc src/index.ts
2. node src/index.js
라고 치면 결과를 확인해볼 수 있습니다. */
interface person {
name: string;
age: number | string;
}
function printAge(person) {
let age: number | string;
if (typeof person.age === 'number' || typeof person.age === 'string') {
age = person.age.toString();
}
console.log(`${person.name}의 나이는 ${age}살 입니다.`);
}
const kimcoding = {
name: '김코딩',
age: 30,
};
const parhacker = {
name: '박해커',
age: '서른',
};
printAge(kimcoding);
printAge(parhacker);
출력
인터섹션 타입
/* 코드를 작성한 뒤 터미널에 순서대로
1. tsc src/index.ts
2. node src/index.js
라고 치면 결과를 확인해볼 수 있습니다. */
function sendEmail(user) {
console.log(`안녕하세요, ${user.name}!`);
if (user.isAdmin) {
console.log(
`
권한이 admin이시군요.
이메일은 ${user.email} 입니다.
`
);
} else {
console.log(
`
권한이 user이시군요.
이메일은 ${user.email} 입니다.
`
);
}
}
const kimcoding = {
name: '김코딩',
email: 'kimcoding@codestates.com',
isAdmin: false,
};
const parkhacker = {
name: '박해커',
email: 'parkhacker@codestates.com',
isAdmin: true,
};
sendEmail(kimcoding);
sendEmail(parkhacker);
/* 코드를 작성한 뒤 터미널에 순서대로
1. tsc src/index.ts
2. node src/index.js
라고 치면 결과를 확인해볼 수 있습니다. */
interface EmailUser {
name: string;
email: string;
}
interface AdminUser {
name: string;
isAdmin: boolean;
}
function sendEmail(user: EmailUser & AdminUser) {
console.log(`안녕하세요, ${user.name}!`);
if (user.isAdmin) {
console.log(
`
권한이 admin이시군요.
이메일은 ${user.email} 입니다.
`
);
} else {
console.log(
`
권한이 user이시군요.
이메일은 ${user.email} 입니다.
`
);
}
}
const kimcoding = {
name: '김코딩',
email: 'kimcoding@codestates.com',
isAdmin: false,
};
const parkhacker = {
name: '박해커',
email: 'parkhacker@codestates.com',
isAdmin: true,
};
sendEmail(kimcoding);
sendEmail(parkhacker);
출력
💁♀️ 유니온과 인터섹션 타입에 대한 설명으로 옳지 않은 것을 고르세요.
A. 유니온 타입을 사용하면 타입을 추론할 수 있기 때문에 타입에 관련된 API를 자동완성으로 쉽게 얻을 수 있습니다.
B. 유니온 타입이나 인터섹션 타입 모두 타입 가드가 필요하지 않습니다.
C. 유니온 타입은 인자를 보낼 때 프로퍼티 중 어떤 것을 보낼 지 선택할 수 있지만, 인터섹션 타입은 인자를 보낼 때 프로퍼티를 전부 보내줘야 합니다.
D. any를 사용해 매개변수를 정의하는 것은 JavaScript를 사용해 작성하는 것과 별 차이가 없기 때문에 유니온 타입을 사용해 작성하는 것이 좋습니다.
🔈 해설
정답 B
B : 유니온 타입은 유니온 타입으로 정의한 둘 이상의 타입 내의 공통 프로퍼티에만 접근할 수 있어 타입 가드가 따로 필요합니다. 그러나 인터섹션 타입은 둘 이상의 타입을 결합해 새로운 타입을 만들어 내는 방법이므로 타입 가드가 필요하지 않습니다.