From 85bde30b8678d3d050c7b3b79d95ea0e8de7bf61 Mon Sep 17 00:00:00 2001 From: Gordon Date: Tue, 19 Feb 2019 11:55:49 -0600 Subject: [PATCH] Fix type inference for connectStateResults --- types/react-instantsearch-core/index.d.ts | 8 ++-- .../react-instantsearch-core-tests.tsx | 38 ++++++++++++++----- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/types/react-instantsearch-core/index.d.ts b/types/react-instantsearch-core/index.d.ts index b48c2a9689..0f2ec9ce61 100644 --- a/types/react-instantsearch-core/index.d.ts +++ b/types/react-instantsearch-core/index.d.ts @@ -511,10 +511,10 @@ export interface StateResultsProvided { * * https://community.algolia.com/react-instantsearch/connectors/connectStateResults.html */ -export function connectStateResults( - stateless: React.StatelessComponent>): React.ComponentClass; -export function connectStateResults>, TDoc = BasicDoc>( - ctor: React.ComponentType): ConnectedComponentClass>; +export function connectStateResults( + stateless: React.StatelessComponent): React.ComponentClass; +export function connectStateResults>>( + ctor: React.ComponentType): ConnectedComponentClass; interface StatsProvided { nbHits: number; diff --git a/types/react-instantsearch-core/react-instantsearch-core-tests.tsx b/types/react-instantsearch-core/react-instantsearch-core-tests.tsx index 09bab5af15..c115873470 100644 --- a/types/react-instantsearch-core/react-instantsearch-core-tests.tsx +++ b/types/react-instantsearch-core/react-instantsearch-core-tests.tsx @@ -21,7 +21,8 @@ import { Hit, TranslatableProvided, translatable, - ConnectorProvided + ConnectorProvided, + StateResultsProvided } from 'react-instantsearch-core'; () => { @@ -209,18 +210,35 @@ import { }; () => { + interface MyDoc { + field1: string; + field2: number; + field3: { compound: string }; + } + interface StateResultsProps { - searchResults: SearchResults<{ - field1: string - field2: number - field3: { compound: string } - }>; + searchResults: SearchResults; // partial of StateResultsProvided additionalProp: string; } - const Stateless = ({ additionalProp, searchResults }: StateResultsProps) => + const Stateless = connectStateResults( + ({ + searchResults, + additionalProp, // $ExpectError + }) => (
+

{additionalProp}

+ {searchResults.hits.map((h) => { + return {h._highlightResult.field1!.value}; + })} +
) + ); + + ; + ; // $ExpectError + + const StatelessWithType = ({ additionalProp, searchResults }: StateResultsProps) =>

{additionalProp}

{searchResults.hits.map((h) => { @@ -229,11 +247,11 @@ import { return {compound}; })}
; - const ComposedStateless = connectStateResults(Stateless); + const ComposedStatelessWithType = connectStateResults(StatelessWithType); - ; // $ExpectError + ; // $ExpectError - ; + ; class MyComponent extends React.Component { render() {