Код Senior Условные и mapped-типы обновлено
snake_case в camelCase: ключи и тип
Условие
Ответ БД приходит с ключами в snake_case. Напиши:
- тип
CamelCase<S>:'created_at'→'createdAt','user_id_hash'→'userIdHash'; - тип
CamelKeys<T>: тот же объект с переименованными ключами (вложенные объекты и массивы объектов тоже, рекурсивно); - функцию
camelizeKeys<T>(obj: T): CamelKeys<T>, делающую то же в рантайме.
Значения, кроме простых объектов и массивов, не трогать.
Примеры
camelizeKeys({"user_id":1,"created_at":"2026-01-01"}) // {"userId":1,"createdAt":"2026-01-01"}
camelizeKeys({"order_items":[{"product_id":5,"unit_price":100}],"total_sum":100}) // {"orderItems":[{"productId":5,"unitPrice":100}],"totalSum":100}
camelizeKeys({"a":{"b_c":{"d_e_f":null}}}) // {"a":{"bC":{"dEF":null}}}
Как подойти
Подсказки: 2
CamelCase: рекурсия по первому_, хвост черезCapitalize.- Переименование ключей в mapped-типе:
as(key remapping, TS 4.1+).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
buildPath: параметры маршрута из шаблонной строки
Следующий вопрос
Префикс ключей: key remapping в mapped-типе