Код Junior Дженерики спрашивают часто обновлено
pick и omit с точными типами
Условие
Реализуй две функции с типами как у утилит Pick и Omit:
pick<T, K extends keyof T>(obj: T, keys: readonly K[]): Pick<T, K>: только перечисленные ключи (отсутствующие в объекте не добавлять);omit<T, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>: все ключи, кроме перечисленных.
Функция toPublic(user) уже написана: она убирает из пользователя пароль и служебные поля через omit, а потом берёт id, name и email через pick.
Примеры
toPublic({"id":1,"name":"Аня","email":"a@b.ru","passwordHash":"x","internalNote":"vip"}) // {"picked":{"id":1,"name":"Аня","email":"a@b.ru"},"keys":["email","id","name"]}
toPublic({"id":2,"name":"Боря","passwordHash":"y","internalNote":""}) // {"picked":{"id":2,"name":"Боря"},"keys":["id","name"]}
toPublic({"id":3,"name":"","email":"","passwordHash":"","internalNote":"x"}) // {"picked":{"id":3,"name":"","email":""},"keys":["email","id","name"]}
Как подойти
Подсказки: 2
- В
pickкопируй только собственные ключи объекта. - В
omitудобно скопировать объект спредом и удалить ключи.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.