Проблема в том, что ваша новая функция на самом деле не того же типа, что и оригинал. У оригинала могут быть дополнительные свойства, которые вы не отправляете в функцию возврата.
Вы можете просто пропустить возвращаемый тип, а также Parameters
и ReturnType
(оба из которых определены, поэтому не переопределяйте их), на самом деле не требуется для полной типизированной версии:
function myMemoize<P extends any[], R>(func: (...a:P)=> R): (...a:P)=> R {
// ...
return function(...args: P): R {
//...
return func.apply(null, args)
}
}
Не уверен, как это взаимодействует с createSelectorCreator
.