diff --git a/packages/react-relay/relay-hooks/EntryPointTypes.flow.js b/packages/react-relay/relay-hooks/EntryPointTypes.flow.js index 53931b6ee2ca..274a6f8821da 100644 --- a/packages/react-relay/relay-hooks/EntryPointTypes.flow.js +++ b/packages/react-relay/relay-hooks/EntryPointTypes.flow.js @@ -200,11 +200,7 @@ export type PreloadProps< +[K in keyof TPreloadedEntryPoints]?: ?ThinNestedEntryPointParams, }, extraProps?: TExtraProps, - // $FlowFixMe[deprecated-type] - queries?: $ObjMap< - TPreloadedQueries, - ExtractQueryTypeHelper, - >, + queries?: ExtractQueryTypes, }>; // Return type of `loadEntryPoint(...)` @@ -257,25 +253,23 @@ export type ExtractQueryTypeHelper = ( PreloadedQuery, ) => ThinQueryParams; -type ExtractQueryType< - TEnvironmentProviderOptions, - // $FlowExpectedError[unclear-type] Need any to make it supertype of all PreloadedQuery - TPreloadedQuery: ?PreloadedQuery, -> = TPreloadedQuery extends null | void - ? TPreloadedQuery - : TPreloadedQuery extends PreloadedQuery - ? ThinQueryParams - : empty; - export type ExtractQueryTypes< TEnvironmentProviderOptions, // $FlowExpectedError[unclear-type] Need any to make it supertype of all PreloadedQuery - PreloadedQueries: {+[string]: PreloadedQuery}, + PreloadedQueries: {+[string]: PreloadedQuery} | void, > = { - [K in keyof PreloadedQueries]: ExtractQueryType< - TEnvironmentProviderOptions, - PreloadedQueries[K], - >, + // We need to match both cases without using distributive conditional types, + // because PreloadedQuery's TQuery parameter is almost phantom, and breaking + // up the union type would cause us to lose track of TQuery. + [K in keyof PreloadedQueries]: PreloadedQueries[K] extends PreloadedQuery< + infer TQuery extends OperationType, + > + ? ThinQueryParams + : PreloadedQueries[K] extends PreloadedQuery< + infer TQuery extends OperationType, + > | void + ? ThinQueryParams | void + : empty, }; export type EntryPoint = diff --git a/packages/react-relay/relay-hooks/__tests__/prepareEntryPoint_DEPRECATED-test.js b/packages/react-relay/relay-hooks/__tests__/prepareEntryPoint_DEPRECATED-test.js index 04bb0832dbfc..c237ed1492e8 100644 --- a/packages/react-relay/relay-hooks/__tests__/prepareEntryPoint_DEPRECATED-test.js +++ b/packages/react-relay/relay-hooks/__tests__/prepareEntryPoint_DEPRECATED-test.js @@ -82,6 +82,7 @@ test('it should preload entry point with queries', () => { { getEnvironment: () => env, }, + // $FlowFixMe[incompatible-call] entryPoint, {id: 'my-id'}, ); @@ -260,6 +261,7 @@ test('with `getEnvironment` function', () => { { getEnvironment, }, + // $FlowFixMe[incompatible-call] entryPoint, {id: 'my-id'}, );