diff --git a/package.json b/package.json index d62b56a..4f6f08b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imdux", - "version": "0.1.5", + "version": "0.1.6", "description": "A redux helper for react & hooks & typescript developers.", "main": "dist/imdux.js", "types": "src/types.d.ts", diff --git a/src/test/imdux.test.ts b/src/test/imdux.test.ts index 531e10b..5ee418b 100644 --- a/src/test/imdux.test.ts +++ b/src/test/imdux.test.ts @@ -31,6 +31,9 @@ describe("imdux object state", () => { array(draft: State, payload: Array) { draft.array = payload; }, + optional(draft: State, payload?: number) { + draft.count -= 1; + }, }; const reducers2 = { @@ -144,6 +147,8 @@ describe("imdux object state", () => { Dispatch.home.hide("3"); Dispatch.home.hide(null); (a: "1" | "2" | null) => Dispatch.home.hide(a); + Dispatch.home.optional(1); + Dispatch.home.optional(undefined); }); }); diff --git a/src/types.d.ts b/src/types.d.ts index b5d569f..86d3343 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -17,8 +17,10 @@ export namespace Imdux { redux: Redux.Store; } + export type InferActionDispathFunction = T extends (...arg: infer A) => any ? A extends [any] ? () => void : T extends (draft: any, payload: infer R) => any ? (payload: R) => void : never : never; + export type InferActionDispath = { - [K in keyof T]: T[K] extends (draft: any) => any ? () => void : T[K] extends (draft: any, payload: infer R) => any ? (payload: R) => void : unknown + [K in keyof T]: InferActionDispathFunction } export type InferDispatch = {