Код Middle Утилитарные типы обновлено
PATCH только разрешённых полей
Условие
Напиши sanitizePatch<T, K extends keyof T>(patch: unknown, allowed: readonly K[]): Partial<Pick<T, K>>: из произвольного тела запроса берёт только ключи из allowed (если тело не объект, возвращает {}). Значения проверяет вызывающий код.
applyProfilePatch(profile, body) в заготовке разрешает менять только name и bio, проверяет, что это строки, и применяет патч. Попытка поменять role или id молча игнорируется.
Примеры
applyProfilePatch({"id":1,"name":"Аня","bio":"","role":"user"}, {"name":"Анна","bio":"Бэкенд"}) // {"id":1,"name":"Анна","bio":"Бэкенд","role":"user"}
applyProfilePatch({"id":1,"name":"Аня","bio":"","role":"user"}, {"role":"admin","id":99}) // {"id":1,"name":"Аня","bio":"","role":"user"}
applyProfilePatch({"id":1,"name":"Аня","bio":"x","role":"user"}, "name=hack") // {"id":1,"name":"Аня","bio":"x","role":"user"}
Как подойти
Подсказки: 2
- Тип результата
Partial<Pick<T, K>>: только разрешённые ключи и каждый необязателен. - Значения внутри
unknown, поэтому присваивание вoutтребует локального приведения.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.