Fix parameter expansion and improve OutputSelector readability #552
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR:
MergeParameters
to only do a single level of type expansion rather than recursive. This fixes [RTKQ] Type conflicts with TypedUseSelectorHook when using reselect 4.1.3 redux-toolkit#1750 , where RTKQ types broke any selector definitions, but retains some improvement of intersected parameters (intersected objects will look like{a, b, c}
rather than{a} & {b} & {c}
)OutputSelectorFields
type to infer theResult
type asReturnType<Combiner>
, and removes theResult
generic. This simplifies the preview type content for a selector considerably.MergeParameters
to replace empty object parameters withnever
, under the assumption that this is the result of two objects with incompatible fields being intersected (such as{a: number} & {a: string}
). This will force compile errors if you attempt to use them. Deeper nested incompat should be caught by TS directly.// @ts-ignore
hack I'd thrown into the middle ofcreateStructuredSelector
, because that doesn't work when you compile the types. Still not sure why a tuple can't be spread there, but laundering it asstate: Head<SelectorParams>, ...params: Tail<SelectorParams>
is a legit fix now.