Код Middle Дженерики обновлено

memoize с сохранением сигнатуры

Условие

Напиши memoize(fn): возвращает функцию с той же сигнатурой, что у fn (параметры и результат), которая кеширует результаты по аргументам. Ключ кеша: JSON.stringify(args).

Тип: function memoize<A extends unknown[], R>(fn: (...args: A) => R): (...args: A) => R.

demo(calls) в заготовке мемоизирует «дорогую» функцию и вызывает её с парами аргументов из calls; возвращает результаты и число реальных вычислений.

Примеры

demo([[1, 2], [1, 2], [2, 1]]) // {"results":[3,3,3],"computed":2}
demo([]) // {"results":[],"computed":0}
demo([[0, 0], [0, 0], [0, 0]]) // {"results":[0,0,0],"computed":1}

Как подойти

Подсказки: 2
  1. Проверяй наличие в кеше через has, а не по истинности значения.
  2. cache.get возвращает R | undefined: после has можно привести к R.

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

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

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