Код 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
- Проверяй наличие в кеше через
has, а не по истинности значения. cache.getвозвращаетR | undefined: послеhasможно привести кR.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.