This post documents a solution for the following error I encountered in a React TypeScript project that was using Redux:
No overload matches this call. Overload 1 of 2, '(props: ProviderProps<Action> | Readonly<ProviderProps<Action>>): Provider<Action>', gave the following error. Type '{ children: Element; store: Store<{ readonly [$CombinedState]?: undefined; } & { repos: ReposState; }, Action>; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Provider<Action>> & Readonly<ProviderProps<Action>>'. Property 'children' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Provider<Action>> & Readonly<ProviderProps<Action>>'. Overload 2 of 2, '(props: ProviderProps<Action>, context: any): Provider<Action>', gave the following error.
React is a JavaScript framework used to build web apps. Redux is an open-source library used to manage the state of an application, and is often used along with React JS.
In this context, the Redux <Provider> component is used to pass application state along to its children components. It is best practice to wrap the entirety of your app in the <Provider> component, and pass the store object into it as an argument (property):
import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import { Provider } from 'react-redux'; import App from './App'; import { store } from './state'; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render( <React.StrictMode> <Provider store={store}> <App /> </Provider> </React.StrictMode> );
In my project, this was producing an error on the <Provider> component that said “No overload matches this call.” I knew this must have something to with the argument(s) being passed along.
At first I thought it might have something to do with my store object, but that was not it. I was able to resolve this roadblock by explicitly passing a ProviderProps object into the Provider component.
import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import { Provider, ProviderProps } from 'react-redux'; import App from './App'; import { store } from './state'; const providerProps: ProviderProps = { store: store, }; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render( <React.StrictMode> <Provider {...providerProps}> <App /> </Provider> </React.StrictMode> );
This worked because the store
object is explicitly typed in the ProviderProps object. This ensures that it matches the type expected by the Provider
component. Ultimately, it was a TypeScript error. TypeScript was not able to infer the store
type correctly.
This was a bug I encountered while building a web app for an Udemy course called “React and Typescript: Build a Portfolio Project“.