Improve combineReducers type safety (TypeScript) #2208
Closed
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 flows names and types of state/reducers through the
combineReducers
function.Using TypeScript's Mapped Types, validate the reducer map object contains all required properties, and that the child reducers return the correct types.
For example:
That worked before, as it does with this PR.
With this change, various errors are caught at compile time:
RootType
property nameCurrent user code that doesn't specify the type on the call to
combineReducers
has the type inferred from the reducer map, so this change doesn't limit them, although the returned reducer's type reflects the reality of the data it will produce.