Nossa ficou muito bom, eu já precisei trabalhar com esse tipo de operação e acabei fazendo nas piores formas possíveis kkkkkk
Segue uma outra alternativa utilizando a estrutura Map:
function createIndex<T>(list: T[], key: keyof T) {
const index = new Map<string, T[]>();
for (const item of list) {
const indexKey = String(item[key]);
const itemsForKey = index.get(indexKey) || [];
itemsForKey.push(item);
index.set(indexKey, itemsForKey);
}
return index;
}