typesafe-actions
typesafe-actions copied to clipboard
Make actions compatible with new Redux Toolkit guidance on TypeScript usage
Is your feature request related to a real problem or use-case?
The Redux team has released the Redux Toolkit library for its v1 release in Oct, 2019. This simplifies implementation scenarios with Redux, and they're encouraging users to adopt it for many scenarios. However, their Action type is not fully compatible with typesafe-actions.
The Redux documentation describes how actions should be able to be used with createReducer:
{
const increment = createAction<number, 'increment'>('increment')
const decrement = createAction<number, 'decrement'>('decrement')
createReducer(0, {
[increment.type]: (state, action) => {
// action is any here
},
[decrement.type]: (state, action: PayloadAction<string>) => {
// even though action should actually be PayloadAction<number>, TypeScript can't detect that and won't give a warning here.
}
})
}
They achieve this by having all their Actions extend the BaseActionCreator type which adds a type property and a match function for easier integration with Redux tooling.
interface BaseActionCreator<P, T extends string, M = never, E = never> {
type: T
match(action: Action<unknown>): action is PayloadAction<P, T, M, E>
}
[see code]
I'm building a library that uses both the Redux Toolkit, and typesafe-actions, but I'm concerned that none of the actions I create with typesafe-actions will be usable in applications using the official Redux Toolkit.
Describe a solution including usage in code example
Seems like the actions from typesafe-actions could extend the same properties the Redux Toolkit does, and we could benefit with interoperability and the better type safety as described by the Redux docs.
Who does this impact? Who is this for?
Users of the Redux Toolkit, or building libraries which should interop with official Redux tooling.
This could also positively impact the following issue: https://github.com/piotrwitek/typesafe-actions/issues/214
IssueHunt Summary
Backers (Total: $50.00)
andrewcraswell ($50.00)
Become a backer now!
Or submit a pull request to get the deposits!
Tips
- Checkout the Issuehunt explorer to discover more funded issues.
- Need some help from other developers? Add your repositories on IssueHunt to raise funds.
IssueHunt has been backed by the following sponsors. Become a sponsor
@andrewcraswell has funded $200.00 to this issue.
- Submit pull request via IssueHunt to receive this reward.
- Want to contribute? Chip in to this issue via IssueHunt.
- Checkout the IssueHunt Issue Explorer to see more funded issues.
- Need help from developers? Add your repository on IssueHunt to raise funds.
Let me experiment with this idea and we'll look into what is possible.
@andrewcraswell has cancelled funding for this issue.(Cancelled amount: $200.00) See it on IssueHunt
@andrewcraswell has funded $50.00 to this issue.
- Submit pull request via IssueHunt to receive this reward.
- Want to contribute? Chip in to this issue via IssueHunt.
- Checkout the IssueHunt Issue Explorer to see more funded issues.
- Need help from developers? Add your repository on IssueHunt to raise funds.
I still think this is a useful feature, but I found a workaround by reusing some of the types from the Redux Toolkit directly. Going to reduce the bounty on this, and convert some of it to a direct donation.
Why do we need feature parity with redux toolkit? This is the original library and I personally like this interface better.
It's definitely not feature parity, it's making sure things that are built with the official Toolkit are not broken in this library. Essentially, why I had to migrate away from typesafe-actions. I can't use it to build a library which won't work with the official Redux recommended way of doing things.
Is there something specific you like better about not including the type and match on the action creator?
I like createReducer but I take it back redux-toolkit is probably going to make this library redundant. I don't think it is because it is "official" but because the tools are really good. It's like the next generation of this.
Hey! Is this issue still up for grabs(Issuehunt bouny)? Thanks! @piotrwitek @kononenko-a-m
I had forgotten about this, but it is still funded. I'm not sure how relevant it is anymore, given that Redux Toolkit has had multiple major releases since. But if an implementation for this is submitted, I'll honor it.
@AndrewCraswell for the record, we've had multiple minor releases of RTK, but no major releases :) we're actually about to publish RTK 2.0 hopefully in the next few weeks, though!
In case anyone is still interested, I've made the necessary code changes in a branch here. I just don't understand enough about dts-jest to get a PR in 😅 Feel free to use!
@EskiMojo14 thanks I'll open PR, if tests are passing I'll consider merging