При разработке решений может возникнуть необходимость группировки массива элементов по ключу/ключам.
В данном случае рассматривается типизированный метод groupBy под тип элемента приложения.
Тип OmitAny используется для исключения any из системного типа ItemData, чтобы достичь строгой типизации ключа типа элемента приложения.
	Код:
	
type OmitAny<T> = {
    [K in keyof T as 0 extends (1 & T[K]) ? never : K]: T[K]
}
function groupBy<D extends ItemData, P extends ItemData>(items: ApplicationItem<D, P>[], key: keyof OmitAny<D>): { [key: string]: ApplicationItem<D, P>[] } {
    return items.reduce(function (result, item) {
        const result_key = item.data[key].id;
        if (!result[result_key]) {
            result[result_key] = [];
        }
        result[result_key].push(item);
        return result;
    }, {});
}
 Пример проверки типа.
![[IMG]](https://community.elma365.com/ru/assets/dHlwZSBjaGVjazE3MTY4OTk5Njk=.png)