Intro
Time to filter the data! In order to be flexible
we filter users using a number of criteria and
return only those matching all of the criteria.
We don't need Admins yet, we only filter Users.
๋ฐ์ดํฐ๋ฅผ ์ ๋ณํ ์ฐจ๋ก์ ๋๋ค! ๋ณด๋ค ์ ์ฐํด์ง๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๊ธฐ์ค์ ํ์ํ๋ ์ซ์๋ฅผ ์ด์ฉํ์ฌ ์ ์ ๋ค์ ํํฐ๋งํ๊ณ , ์ค์ง ์ด ๋ชจ๋ ๊ธฐ์ค์ ๋ง๋ ์ ์ ๋ค๋ง ๋ฆฌํดํด์ผํฉ๋๋ค. ์์ง Admin๋ค์ ํ์ํ์ง ์๊ณ User๋ค๋ง ํํฐ๋งํ๋ฉด ๋ฉ๋๋ค.
Exercise
Without duplicating type structures, modify
filterUsers function definition so that we can
pass only those criteria which are needed,
and not the whole User information as it is
required now according to typing.
ํ์ ๊ตฌ์กฐ๋ฅผ ๋ณต์ ํ์ง ๋ง๊ณ , filterUsers ํจ์์ ์ ์๋ถ๋ถ์ ์์ ํด์ ์ ์ฒด ์ ์ ์ ๋ณด๊ฐ ์๋ ํ์ํ ๊ธฐ์ค๋ง ํต๊ณผ์์ผ์ฃผ์ธ์.
Exclude "type" from filter criteria.
๋ณด๋์ค ๋ฌธ์ : ํํฐ ๊ธฐ์ค์์ "type"์ ์ฌ์ฉํ์ง ์๊ณ ์ํํด๋ณด์ธ์
Code
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];
});
});
}
์ฒ์์๋ Object extends User๋ก ํ๋๋ฐ ๋ฌผ์ํ๊ฐ ๋น ์ก๋ค๋ ๊ฒฝ๊ณ ๊ฐ ๋ ์ ์คํจํ๋ค ใ ใ
From
https://typescript-exercises.github.io/#exercise=5&file=%2Findex.ts
'๐ Type Challenges > Typescript Exercises' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TS] TypeScript Exercises 7 ํด์ ๋ฐ ํ์ด (0) | 2023.07.19 |
---|---|
[TS] TypeScript Exercises 5 ํด์ ๋ฐ ํ์ด (0) | 2023.07.17 |
[TS] TypeScript Exercises 4 ํด์ ๋ฐ ํ์ด (0) | 2023.07.05 |
[TS] TypeScript Exercises 3 ํด์ ๋ฐ ํ์ด (0) | 2023.07.04 |
[TS] TypeScript Exercises 2 ํด์ ๋ฐ ํ์ด (0) | 2023.07.03 |