Так что у меня очень странная проблема с React Context + Typescript.
Рабочий пример
В приведенном выше примере вы можете увидеть, что я на самом деле пытаюсь сделать.По сути, я управляю состоянием с помощью нового метода useContext, и он отлично работает.
Однако, когда я пытаюсь сделать это на своем боксе, он не может найти значения состояния, передаваемые через useReducer.
export function AdminStoreProvider(props: any) {
const [state, dispatch] = useReducer(reducer, initialState);
// state.isAuth is avail here
// state.user is avail here
const value = { state, dispatch };
// value.state.isAuth is avail here
return (
/* value does not contain state once applied to the value prop */
<AdminStore.Provider value={value}>{props.children}
</AdminStore.Provider>
);
}
Сообщение об ошибке:
Type '{ state: { isAuth: boolean; user: string; }; dispatch:
Dispatch<Actions>; }' is missing the following properties from type
'IState': isAuth, user
Имейте в виду, что код, который я использую, именно то, что я использую на своем ящике, я даже загрузил код из песочницы ипопытался запустить его, и он не работает.
Я использую VSCode 1.31
Мне удалось вывести это, если я изменил способ создания контекста из:
export const AdminStore = React.createContext(initialState);
до
export const AdminStore = React.createContext(null);
Свойство value больше не генерирует эту ошибку.
Однако теперь useContext возвращает ошибку: состояние не существует при нулевом значении.И то же самое, если я устанавливаю defaultState для контекста на {}.
И, конечно, если я
React.createContext();
, тогда TS кричит о том, что defaultValue не предоставляется.
В песочнице все 3 версии создания объекта контекста работают нормально.
Заранее благодарим за любые советы.