Код Middle Дженерики спрашивают часто обновлено

Типизированный groupBy по ключу объекта

Условие

Напиши groupBy(items, key): группирует массив объектов по значению поля key. Тип должен быть точным:

  • key только из ключей элемента, и только из тех, у которых значение string или number (по ним можно индексировать объект);
  • результат Partial<Record<T[K], T[]>>: если T[K] это 'admin' | 'user', у результата ровно такие ключи.

Порядок элементов внутри группы исходный.

Примеры

groupBy([{"id":1,"role":"admin"}, {"id":2,"role":"user"}, {"id":3,"role":"admin"}], "role") // {"admin":[{"id":1,"role":"admin"},{"id":3,"role":"admin"}],"user":[{"id":2,"role":"user"}]}
groupBy([], "role") // {}
groupBy([{"n":"a","age":30}, {"n":"b","age":30}, {"n":"c","age":20}], "age") // {"20":[{"n":"c","age":20}],"30":[{"n":"a","age":30},{"n":"b","age":30}]}

Как подойти

Подсказки: 2
  1. KeysOfType оставляет только ключи с нужным типом значения.
  2. Индексировать Record можно только PropertyKey, отсюда пересечение T[K] & PropertyKey.

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

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

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