Код 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
  1. CamelCase: рекурсия по первому _, хвост через Capitalize.
  2. Переименование ключей в mapped-типе: as (key remapping, TS 4.1+).

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

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