Я создаю энхансер магазина Redux, который принимает функцию для сериализации состояния Redux.Я создам магазин и настрою подписку на изменения - при каждом изменении я буду сериализовывать состояние.Для этого MCVE я игнорирую аспект подписки и просто немедленно вызываю функцию сериализации.
Однако из-за природы функции более высокого порядка я не могу соотнести мой универсальный тип для состояния (необходимого для функции сериализации) с универсальным типом, возвращаемым создателем магазина:
// Copied and reduced from Redux 4.0.1
type Reducer<S = any> = (
state: S | undefined,
) => S
type DeepPartial<T> = { [K in keyof T]?: DeepPartial<T[K]> }
interface Store<S = any> {
getState(): S
}
type StoreEnhancer<Ext = {}, StateExt = {}> = (
next: StoreEnhancerStoreCreator
) => StoreEnhancerStoreCreator<Ext, StateExt>
type StoreEnhancerStoreCreator<Ext = {}, StateExt = {}> = <
S = any,
>(
reducer: Reducer<S>,
preloadedState?: DeepPartial<S>
) => Store<S & StateExt> & Ext
// My reduced code
interface Config<S> {
serialize: (state: S) => string;
}
const storage = <S>(config: Config<S>): StoreEnhancer => createStore => (reducer, preloadedState) => {
const { serialize } = config;
const theStore = createStore(reducer, preloadedState);
const state = theStore.getState();
const serializedState = serialize(state);
return theStore;
}
( детская площадка )
Ошибка:
const serializedState = serialize(state);
^~~~~
Argument of type 'S & {}' is not assignable to parameter of type 'S'.
Сообщение об ошибке раздражает, потому что я почти уверен, что два S
не связаны;изменение определения в StoreEnhancerStoreCreator
для использования X
вместо S
изменяет это сообщение об ошибке.
Как я могу связать свой параметр универсального типа с параметром универсального, определенным в StoreEnhancerStoreCreator
?