Код 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
  1. В pick копируй только собственные ключи объекта.
  2. В omit удобно скопировать объект спредом и удалить ключи.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме