Код Junior Утилитарные типы обновлено

Diff объектов: Partial<T> с изменёнными полями

Условие

Напиши changedFields<T extends Record<string, unknown>>(before: T, after: T): Partial<T>: возвращает объект только с теми полями after, значения которых отличаются от before (сравнение через Object.is для примитивов; для массивов и объектов сравнивай JSON.stringify). Такой diff удобно отправлять в PATCH и писать в аудит-лог.

Примеры

changedFields({"name":"Аня","age":30}, {"name":"Аня","age":31}) // {"age":31}
changedFields({"a":1}, {"a":1}) // {}
changedFields({"tags":["a"],"meta":{"x":1}}, {"tags":["a","b"],"meta":{"x":1}}) // {"tags":["a","b"]}

Как подойти

Подсказки: 1
  1. Object.keys возвращает string[]: для индексации T приведи к (keyof T)[].

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

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