typesafe-actions icon indicating copy to clipboard operation
typesafe-actions copied to clipboard

Make actions compatible with new Redux Toolkit guidance on TypeScript usage

Open AndrewCraswell opened this issue 5 years ago • 13 comments

Issuehunt badges

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)

Become a backer now!

Or submit a pull request to get the deposits!

Tips


IssueHunt has been backed by the following sponsors. Become a sponsor

AndrewCraswell avatar Apr 14 '20 19:04 AndrewCraswell

@andrewcraswell has funded $200.00 to this issue.


issuehunt-oss[bot] avatar Apr 14 '20 20:04 issuehunt-oss[bot]

Let me experiment with this idea and we'll look into what is possible.

piotrwitek avatar Apr 14 '20 23:04 piotrwitek

@andrewcraswell has cancelled funding for this issue.(Cancelled amount: $200.00) See it on IssueHunt

issuehunt-oss[bot] avatar Apr 16 '20 07:04 issuehunt-oss[bot]

@andrewcraswell has funded $50.00 to this issue.


issuehunt-oss[bot] avatar Apr 16 '20 07:04 issuehunt-oss[bot]

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.

AndrewCraswell avatar Apr 16 '20 07:04 AndrewCraswell

Why do we need feature parity with redux toolkit? This is the original library and I personally like this interface better.

avin-kavish avatar Apr 21 '20 17:04 avin-kavish

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?

AndrewCraswell avatar Apr 21 '20 18:04 AndrewCraswell

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.

avin-kavish avatar Apr 24 '20 09:04 avin-kavish

Hey! Is this issue still up for grabs(Issuehunt bouny)? Thanks! @piotrwitek @kononenko-a-m

mighty-phoenix avatar Mar 23 '22 06:03 mighty-phoenix

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 avatar Mar 23 '22 07:03 AndrewCraswell

@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!

markerikson avatar Nov 06 '23 22:11 markerikson

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 avatar Nov 06 '23 23:11 EskiMojo14

@EskiMojo14 thanks I'll open PR, if tests are passing I'll consider merging

piotrwitek avatar Nov 09 '23 05:11 piotrwitek