useAuthService.tsx
import { createStore } from 'reusable';
import { useReducer, useEffect } from 'react';
export type AuthenticationState = {
user: any,
}
export type AuthenticationAction = {
type: 'UPDATE_USER',
payload: any,
}
const initialState = {
user: null,
}
const reducer = (state: AuthenticationState, action: AuthenticationAction) => {
switch (action.type) {
case 'UPDATE_USER':
return { ...state, user: action.payload };
default:
throw new Error();
}
}
export const useAuthenticationState = createStore(() => {
const [state, dispatch] = useReducer(reducer, initialState);
return [state, dispatch]
})
Внутри этого файла состояние имеет тип {user: any;}
, а переменная диспетчеризации имеет React.Dispatch<AuthenticationAction>
. Но при их использовании в компоненте машинописный код выдает ошибку в VS C.
Auth.tsx:
const Authentication = () => {
const [state, dispatch] = useAuthenticationState();
return (
<div className="bg-red-500 text-white">
{state.user?.email}
</div>
);
};
При попытке использовать «пользователь» из состояния Typescript выдает ошибку:
Property 'user' does not exist on type '{ user: any; } | Dispatch<AuthenticationAction>'.
Property 'user' does not exist on type 'Dispatch<AuthenticationAction>'.ts(2339)
Однако отображается. Использование VS C с Typescript 3.8.3.