Jieunny의 블로그
[TS] Exercises 1~3 본문
타입스크립트에 대한 감을 잃어버린 것 같아서 연습문제를 꾸준히 풀어보려고 한다. 💪
🔗 연습문제 링크
exercises1
📌 데이터가 주어지면, User 인터페이스를 정의하고 사용해라.
export interface User {
name: string;
age: number;
occupation: string;
}
// type을 사용해도 된다.
export const users: User[] = [
{
name: 'Max Mustermann',
age: 25,
occupation: 'Chimney sweep'
},
{
name: 'Kate Müller',
age: 23,
occupation: 'Astronaut'
}
];
export function logPerson(user: User) {
console.log(` - ${user.name}, ${user.age}`);
}
console.log('Users:');
users.forEach(logPerson);
💡 users 배열을 보고 User 객체의 속성 타입을 정의해주는 문제다.
인터페이스는 객체의 구조를 정의하는 데 사용한다.
그럼 type과 interface의 차이는 뭘까?
type | interface | |
타입 선언 | 모든 타입 | 객체 |
확장 | 불가능 | 가능 |
📚 참고 : https://tecoble.techcourse.co.kr/post/2022-11-07-typeAlias-interface/
exercises2
📌 Person 타입이 없으므로 정의하고 사용해라. 모든 TS 오류를 해결하기 위해 person 배열과 logPerson 함수에서 사용해라.
interface User {
name: string;
age: number;
occupation: string;
}
interface Admin {
name: string;
age: number;
role: string;
}
export type Person = User | Admin;
export const persons: Person[] /* <- Person[] */ = [
{
name: 'Max Mustermann',
age: 25,
occupation: 'Chimney sweep'
},
{
name: 'Jane Doe',
age: 32,
role: 'Administrator'
},
{
name: 'Kate Müller',
age: 23,
occupation: 'Astronaut'
},
{
name: 'Bruce Willis',
age: 64,
role: 'World saver'
}
];
export function logPerson(user: Person) {
console.log(` - ${user.name}, ${user.age}`);
}
persons.forEach(logPerson);
💡 persons 배열에 occupation 과 role 속성이 모두 있으므로 유니온 타입을 이용해서 User와 Admin이 모두 올 수 있게 선언한다.
persons의 모든 객체(Person 타입)가 logPerson 함수의 파라미터로 들어가므로 user의 타입도 Person으로 바꿔주어야 한다.
exercises3
📌 logPerson 함수의 타입 오류를 수정해라.
logPerson 함수는 User 및 Admin을 모두 수락해야 하며 입력에 따라 관련 정보(occupation for User & role for Admin)를 출력해야 합니다.
interface User {
name: string;
age: number;
occupation: string;
}
interface Admin {
name: string;
age: number;
role: string;
}
export type Person = User | Admin;
export const persons: Person[] = [
{
name: 'Max Mustermann',
age: 25,
occupation: 'Chimney sweep'
},
{
name: 'Jane Doe',
age: 32,
role: 'Administrator'
},
{
name: 'Kate Müller',
age: 23,
occupation: 'Astronaut'
},
{
name: 'Bruce Willis',
age: 64,
role: 'World saver'
}
];
export function logPerson(person: Person) {
let additionalInformation: string;
if ("role" in person) {
additionalInformation = person.role;
} else {
additionalInformation = person.occupation;
}
console.log(` - ${person.name}, ${person.age}, ${additionalInformation}`);
}
persons.forEach(logPerson);
💡 Person 타입이 User와 Admin 중에 하나가 가능하게 선언되어 있는데, person.role 이라고 하면 User에는 없는 속성이기 때문에 에러가 난다. role 속성이 있는지 확인하려면 'in' 연산자를 사용해야 한다.
'Study > TypeScript' 카테고리의 다른 글
[TS] Exercises5 (0) | 2023.07.20 |
---|---|
[TS] Exercises 4 (0) | 2023.07.19 |
[TS] 함수 조합의 원리와 응용 (0) | 2023.02.09 |
[TS] Promise와 async/await 구문 (0) | 2023.02.06 |
[TS] 반복기와 생성기 (0) | 2023.02.03 |