piotrwitek / typesafe-actions

Typesafe utilities for "action-creators" in Redux / Flux Architecture
https://codesandbox.io/s/github/piotrwitek/typesafe-actions/tree/master/codesandbox
MIT License
2.41k stars 99 forks source link

Make actions compatible with new Redux Toolkit guidance on TypeScript usage #230

Open AndrewCraswell opened 4 years ago

AndrewCraswell commented 4 years ago

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) - [andrewcraswell andrewcraswell](https://issuehunt.io/u/andrewcraswell) ($50.00) #### [Become a backer now!](https://issuehunt.io/r/piotrwitek/typesafe-actions/issues/230) #### [Or submit a pull request to get the deposits!](https://issuehunt.io/r/piotrwitek/typesafe-actions/issues/230) ### Tips - Checkout the [Issuehunt explorer](https://issuehunt.io/r/piotrwitek/typesafe-actions/) to discover more funded issues. - Need some help from other developers? [Add your repositories](https://issuehunt.io/r/new) on IssueHunt to raise funds. --- IssueHunt has been backed by the following sponsors. [Become a sponsor](https://issuehunt.io/membership/members)
issuehunt-oss[bot] commented 4 years ago

@andrewcraswell has funded $200.00 to this issue.


piotrwitek commented 4 years ago

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

issuehunt-oss[bot] commented 4 years ago

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

issuehunt-oss[bot] commented 4 years ago

@andrewcraswell has funded $50.00 to this issue.


AndrewCraswell commented 4 years ago

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.

avin-kavish commented 4 years ago

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

AndrewCraswell commented 4 years ago

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?

avin-kavish commented 4 years ago

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.

mighty-phoenix commented 2 years ago

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

AndrewCraswell commented 2 years ago

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.

markerikson commented 10 months ago

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

EskiMojo14 commented 10 months ago

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!

piotrwitek commented 10 months ago

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