...

Метод groupBy

Тема в разделе "Примеры сценариев", создана пользователем kirillovykh, 28 май 2024.

Метки:
  1. kirillovykh

    kirillovykh Участник

    При разработке решений может возникнуть необходимость группировки массива элементов по ключу/ключам.

    В данном случае рассматривается типизированный метод groupBy под тип элемента приложения.
    Тип OmitAny используется для исключения any из системного типа ItemData, чтобы достичь строгой типизации ключа типа элемента приложения.

    Код:
    
    type OmitAny<T> = {
        [
    K in keyof T as extends (T[K]) ? never K]: T[K]
    }


    function 
    groupBy<extends ItemDataextends ItemData>(itemsApplicationItem<DP>[], keykeyof OmitAny<D>): { [keystring]: ApplicationItem<DP>[] } {
        return 
    items.reduce(function (resultitem) {
            const 
    result_key item.data[key].id;
            if (!
    result[result_key]) {
                
    result[result_key] = [];
            }
            
    result[result_key].push(item);
            return 
    result;
        }, {});
    }

    Пример проверки типа.
    [​IMG]