Giter VIP home page Giter VIP logo

Comments (11)

piotrwitek avatar piotrwitek commented on June 15, 2024 1

Hi @abdurahmanus
From v2.0.4 both of your use-cases should work correctly: #48

// case 1)
const someAction = createAction('something', resolve => () => resolve(undefined, 'some meta info')); 
someAction() // { type: 'something'; meta: string; }

// case 2)
const someOtherAction = createStandardAction('somethingElse').map(() => ({
  meta: 'some meta info',
}))
someOtherAction() // { type: 'somethingElse'; meta: string; }

API documentation was updated with all the above examples of "meta only" cases.

Already released a new version to npm, enjoy!

PS: I'm closing this as all the mentioned cases are supported now, and the issue with strictFunctionTypes is already tracked in #44, so there's no need for duplication

from typesafe-actions.

abdurahmanus avatar abdurahmanus commented on June 15, 2024

also it would be helpful if we could create actions using createAsyncActions helper specifying the type of meta

from typesafe-actions.

piotrwitek avatar piotrwitek commented on June 15, 2024

Ad 1) this is a valid point, adding support for this case is easy, will need to update validation checks
Ad 2) not sure what you want here, it's how TS works, nothing actionable or related to the library

Regarding types issue it is related to react-redux@6 types, not in this library, please use react-redux@5 until there is a working solution: #42

To extend createAsyncActions API we need a proposal

from typesafe-actions.

abdurahmanus avatar abdurahmanus commented on June 15, 2024

I've tried react-redux types v5
this code

const ADD = 'ADD'

interface Todo {
  title: string;
  id: number;
  completed: boolean;
}

export const add = createStandardAction(ADD).map(
  ({ title }: { title: string }) => ({
    payload: { title, id: 12, completed: false } as Todo,
  })
);

still don't work

[ts]
Argument of type '({ title }: { title: string; }) => { payload: Todo; }' is not assignable to parameter of type '(payload?: { title: string; } | undefined, meta?: void | undefined) => { payload: Todo; }'.
Types of parameters '__0' and 'payload' are incompatible.
Type '{ title: string; } | undefined' is not assignable to type '{ title: string; }'.
Type 'undefined' is not assignable to type '{ title: string; }'.

from typesafe-actions.

abdurahmanus avatar abdurahmanus commented on June 15, 2024

What I want at 2) is to avoid dancing with payload type. Like this:

const someOtherAction = createStandardAction('somethingElse').map((payload: number) => ({
  meta: 'some meta info',
  payload,
}))

Don't sure if it possible

from typesafe-actions.

piotrwitek avatar piotrwitek commented on June 15, 2024

Ad 1) working fine here: https://github.com/piotrwitek/typesafe-actions-todo-app/blob/master/src/features/todos/actions.ts

Ad 2) map is for custom logic, better to use this in your case:

const increment = createStandardAction('INCREMENT')<void, MetaType>();
increment(undefined, 'meta info')

from typesafe-actions.

abdurahmanus avatar abdurahmanus commented on June 15, 2024

interface MetaType {
s: string;
}
const increment = createStandardAction('INCREMENT')<void, MetaType>();

gives me {type: 'INCREMENT'} without meta at all

from typesafe-actions.

abdurahmanus avatar abdurahmanus commented on June 15, 2024

Maybe problems with types in my case because of different settings in tsconfig.json
{
"compilerOptions": {
"jsx": "react",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "ClientApp/dist/",
"sourceMap": true,
"strict": true,
"target": "es5",
"lib": [ "es6", "dom" ],
"noEmitOnError": true,
"baseUrl": "./",
"paths": {
...
}
},
"include": [ "ClientApp/**/*" ]
}

from typesafe-actions.

abdurahmanus avatar abdurahmanus commented on June 15, 2024

"strictFunctionTypes": false, removes some ts warnings/errors, but it's not a solution

from typesafe-actions.

piotrwitek avatar piotrwitek commented on June 15, 2024

"strictFunctionTypes": false, removes some ts warnings/errors, but it's not a solution

Ok this looks like something we have to investigate, thanks. #44

EDIT: From deeper analysis looks like use-case 2 issue is the symptom of strictFunctionTypes issue, so should be resolved with #44

from typesafe-actions.

piotrwitek avatar piotrwitek commented on June 15, 2024

Fix for use-case 1 issue tracked here: #47

from typesafe-actions.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.