Jieunny์ ๋ธ๋ก๊ทธ
[TS] Exercises5 ๋ณธ๋ฌธ
exercises5
๐ Type ๊ตฌ์กฐ๋ฅผ ๋ณต์ ํ์ง ์๊ณ filterUsers ํจ์ ์ ์๋ฅผ ์์ ํ์ฌ ์ ๋ ฅ์ ๋ฐ๋ผ ํ์ํ ์ ์ฒด User ์ ๋ณด๊ฐ ์๋ ํ์ํ criteria๋ง ์ ๋ฌํด๋ผ.
interface User {
type: 'user';
name: string;
age: number;
occupation: string;
}
interface Admin {
type: 'admin';
name: string;
age: number;
role: string;
}
export type Person = User | Admin;
export const persons: Person[] = [
{ type: 'user', name: 'Max Mustermann', age: 25, occupation: 'Chimney sweep' },
{
type: 'admin',
name: 'Jane Doe',
age: 32,
role: 'Administrator'
},
{
type: 'user',
name: 'Kate Müller',
age: 23,
occupation: 'Astronaut'
},
{
type: 'admin',
name: 'Bruce Willis',
age: 64,
role: 'World saver'
},
{
type: 'user',
name: 'Wilson',
age: 23,
occupation: 'Ball'
},
{
type: 'admin',
name: 'Agent Smith',
age: 23,
role: 'Administrator'
}
];
export const isAdmin = (person: Person): person is Admin => person.type === 'admin';
export const isUser = (person: Person): person is User => person.type === 'user';
export function logPerson(person: Person) {
let additionalInformation = '';
if (isAdmin(person)) {
additionalInformation = person.role;
}
if (isUser(person)) {
additionalInformation = person.occupation;
}
console.log(` - ${person.name}, ${person.age}, ${additionalInformation}`);
}
export function filterUsers(persons: Person[], criteria: Partial<User>): User[] {
return persons.filter(isUser).filter((user) => {
const criteriaKeys = Object.keys(criteria) as (keyof User)[];
return criteriaKeys.every((fieldName) => {
return user[fieldName] === criteria[fieldName];
});
});
}
console.log('Users of age 23:');
filterUsers(
persons,
{
age: 23
}
).forEach(logPerson);
๐ก User์ ์ ์ฒด ์์ฑ์ด ์๋ ํ์ํ ์์ฑ๋ง ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํ์ ์ ์ง์ ํด์ค๋ค.
ํ์ ์คํฌ๋ฆฝํธ์ ์ ํธ๋ฆฌํฐ ํ์ ์ Partial์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ๋ค.
โ๏ธ '์ ํธ๋ฆฌํฐ ํ์ ' ์ด๋ ๋ฌด์์ผ๊น?
- ํ์ ๋ณํ์ ๋ ์ฝ๊ฒ ํ ์ ์๊ฒ ํ๋ค.
- Partial<Type>์ Type์ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ์ ํ์ ์ผ๋ก ๋ง๋๋ ํ์ ์ ์์ฑํ๋ค.
- ์ฃผ์ด์ง ํ์ ์ ๋ชจ๋ ํ์ ํ์ ์งํฉ์ ๋ํ๋ด๋ ํ์ ์ ๋ฐํํ๋ค.
- Type์ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ฑฐ๋, ์๋ฌด ํ๋กํผํฐ๋ ๊ฐ์ง ์์๋ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์์ง๋ง, Type์ ํ๋กํผํฐ๊ฐ ์๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
- Required<Type>, Readonly<Type>, Record<Keys,Type> ๋ฑ์ด ์๋ค.
'Study > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TS] TodoList CRUD (0) | 2023.10.17 |
---|---|
[TS] ๋ฆฌ์กํธ + ํ์ ์คํฌ๋ฆฝํธ + Redux (0) | 2023.09.14 |
[TS] Exercises 4 (0) | 2023.07.19 |
[TS] Exercises 1~3 (0) | 2023.07.18 |
[TS] ํจ์ ์กฐํฉ์ ์๋ฆฌ์ ์์ฉ (0) | 2023.02.09 |