diff --git a/types/react-router/index.d.ts b/types/react-router/index.d.ts index 050f73725f..3746fa5c50 100644 --- a/types/react-router/index.d.ts +++ b/types/react-router/index.d.ts @@ -143,12 +143,8 @@ export interface WithRouterStatics> { // they are decorating. Due to this, if you are using @withRouter decorator in your code, // you will see a bunch of errors from TypeScript. The current workaround is to use withRouter() as a function call // on a separate line instead of as a decorator. -export function withRouter>( - component: C, -): React.ComponentClass< - Omit, keyof RouteComponentProps> & WithRouterProps, - never -> & - WithRouterStatics; +export function withRouter

, C extends React.ComponentType

>( + component: C & React.ComponentType

, +): React.ComponentClass> & WithRouterProps> & WithRouterStatics; export const __RouterContext: React.Context; diff --git a/types/react-router/test/WithRouter.tsx b/types/react-router/test/WithRouter.tsx index 0f9f684a2c..e97ef0e962 100644 --- a/types/react-router/test/WithRouter.tsx +++ b/types/react-router/test/WithRouter.tsx @@ -13,8 +13,6 @@ const FunctionComponent: React.FunctionComponent = props => (

Welcome {props.username}

); -declare const Component: React.ComponentType; - class ComponentClass extends React.Component { render() { return

Welcome {this.props.username}

; @@ -23,10 +21,15 @@ class ComponentClass extends React.Component { const WithRouterComponentFunction = withRouter(ComponentFunction); const WithRouterFunctionComponent = withRouter(FunctionComponent); -const WithRouterComponent = withRouter(Component); const WithRouterComponentClass = withRouter(ComponentClass); WithRouterComponentClass.WrappedComponent; // $ExpectType typeof ComponentClass +// Fix introduced in https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38326 +// caused more common use cases with `strictFunctionTypes` to fail +// declare const Component: React.ComponentType; +// $ExpectError ^3.6.3 +// const WithRouterComponent = withRouter(Component); + const WithRouterTestFunction = () => ( );