0

I am creating context to handle authentication in typescript app. I have written this AuthProvider.ts

/*-- Imports --*/

/*--  AuthContextType interface and defaults -- */

const AuthContext = createContext<AuthContextType>(contextDefaults);

export const useAuth = () => {
  return useContext(AuthContext);
};

interface AuthProviderProps {
  children: ReactNode;
}

const AuthProvider = ({ children }: AuthProviderProps) => {
  const [user, setUser] = useState<User | null>(null);

  const isLoggedIn = !!user;

  const login = (data: User) => {
    setUser(data);
  };

  const logout = () => {
    setUser(null);
  };

  return (
    <AuthContextType.Provider value={{ user, isLoggedIn, login, logout }}>
      {children}
    </AuthContextType.Provider>
  );
};

export default AuthProvider;

Then I am wrapping App with this AuthProvider;

/* --- imports ---*/

const App = () => {
  return (
      <AuthProvider>
        <div>App</div>
      </AuthProvider>
  );
};

export default App;

This code is giving errors and when I write same code in javascript app it is working fine.

AuthContext.ts Errors

enter image description here

App.js Error enter image description here

Any help will be appreciated.

Thanks

0

1 Answer 1

4

Could it be that you've used: AuthContextType.Provider when you mean AuthContext.Provider?

AuthContextType is a Typescript type, not a react context object.

const AuthProvider = ({ children }: AuthProviderProps) => {
  .... 
  return (
    <AuthContext.Provider value={{ user, isLoggedIn, login, logout }}>
      {children}
    </AuthContext.Provider>
  );
};

Does this work?

Sign up to request clarification or add additional context in comments.

1 Comment

I tried this but didn't work.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.