У меня есть вспомогательная функция, которая принимает и Object из функций и возвращает прокси этого объекта с его функциями, составленными с введенным первым аргументом.
лучше показано в коде: -
// example of object
export const selectors = {
selectA: (state:State) => state.a,
addToA : (state:State, num:number) => state.a + num
}
// ... in another file my helper fn
import {useSelector} from 'react-redux';
// PROBLEM IS HERE...
export const function bindSelector(obj){
return new Proxy(obj,{
get: (main, key, ctx) => {
const fn = main[key].bind(ctx);
// always inject store as first prop of fn
// we get store arg from useSelector higher order (its already properly typed)
return props => useSelector( store=> fn(store, props) )
}
})
}
export default bindSelector(selectors);
поэтому я использую прокси, так что мне не нужно включать useSelector или передавать параметры хранилища каждому селектору, когда я его использую
пример использования этого будет
import selectors from './a';
// now i can just
const a = selectors.selectA(); // give error param missing
const aAnd2 = selectors.addToA(2); // how to tell typescript that this first arg is in fact the 2nd arg :D !.
Проблема
- если я ввожу bindSelector для возврата того же типа (obj), то получаю ошибку
selecte require 1 param
, потому что машинопись не знает, что мой прокси уже предоставил первый параметр функции.