Как типизировать reduce Typescript?

В TypeScript вы можете типизировать функцию reduce с использованием дженериков.

reduce - это функция, которая применяет указанную коллекцию (например, массив) к функции аккумулятора, чтобы получить единственное значение. Вот пример его типизации:

function reduce<T, U>(
    array: T[],
    callback: (accumulator: U, currentValue: T, currentIndex: number, array: T[]) => U,
    initialValue: U
): U {
    let accumulator = initialValue;
    for (let i = 0; i < array.length; i++) {
        accumulator = callback(accumulator, array[i], i, array);
    }
    return accumulator;
}

В этом примере T - это тип элементов массива, а U - тип значения аккумулятора. Коллбэк-функция callback принимает в качестве параметров текущее значение аккумулятора, текущий элемент массива, текущий индекс и сам массив. Она должна возвращать обновленное значение аккумулятора.

Например, мы можем использовать типизированную функцию reduce следующим образом:

const numbers = [1, 2, 3, 4, 5];

const sum = reduce(numbers, (accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // выводит 15

const product = reduce(numbers, (accumulator, currentValue) => accumulator * currentValue, 1);
console.log(product); // выводит 120

В этом примере мы используем reduce для подсчета суммы и произведения элементов массива numbers. В функции обратного вызова мы складываем или умножаем значение текущего элемента с аккумулятором и возвращаем результат.

Таким образом, типизация функции reduce позволяет нам указывать правильные типы для элементов массива и аккумулятора, а также обеспечивает безопасность типов во время компиляции TypeScript.