redux-thunk-actions icon indicating copy to clipboard operation
redux-thunk-actions copied to clipboard

typescript definition?

Open darewreck54 opened this issue 7 years ago • 4 comments

Is there an a @types (Typescript) definition for this library?

darewreck54 avatar Jul 07 '17 09:07 darewreck54

Not yet, but it's a very good idea! Let me know if you are up for it, or else I'll try to do it soon.

machadogj avatar Jul 08 '17 14:07 machadogj

i'm by no means an expert at it, but here's something to at least get you started:

export function createActionThunk(type: string, fn: () => any): {
	(): Promise<any>
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};
export function createActionThunk<T1>(type: string, fn: (v1: T1) => any, ...args: any): {
	(v1: T1): Promise<any>
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};
export function createActionThunk<T1, T2>(type: string, fn: (v1: T1, v2: T2) => any, ...args: any): {
	(v1: T1, v2: T2): any
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};
export function createActionThunk<T1, T2, T3>(type: string, fn: (v1: T1, v2: T2, v3: T3) => any, ...args: any): {
	(v1: T1, v2: T2, v3: T3): any
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};
export function createActionThunk<T1, T2, T3, T4>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4) => any, ...args: any): {
	(v1: T1, v2: T2, v3: T3, v4: T4): any
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};
export function createActionThunk<T1, T2, T3, T4, T5>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4, v5: T5) => any, ...args: any): {
	(v1: T1, v2: T2, v3: T3, v4: T4, v5: T5): any
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};
export function createActionThunk<T1, T2, T3, T4, T5, T6>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => any, ...args: any): {
	(v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6): any
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};
export function createActionThunk<T1, T2, T3, T4, T5, T6, T7>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => any, ...args: any): {
	(v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7): any
	readonly NAME: string
	readonly START: string
	readonly SUCCEEDED: string
	readonly FAILED: string
	readonly ENDED: string
};

export as namespace ReduxThunkActions;

saving that as an index.d.ts for an @types/ package works well.

nodren avatar Jan 03 '19 21:01 nodren

Quick update for anyone seeing this, who is using the latest typescript

create a folder called 'redux-thunk-actions' somewhere in your project. add a file index.d.ts paste the following into that file then save and everything should work.

declare module 'redux-thunk-actions' {
	export function createActionThunk(type: string, fn: () => any): {
		(): Promise<any>
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
	export function createActionThunk<T1>(type: string, fn: (v1: T1) => any, ...args: any): {
		(v1: T1): Promise<any>
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
	export function createActionThunk<T1, T2>(type: string, fn: (v1: T1, v2: T2) => any, ...args: any): {
		(v1: T1, v2: T2): any
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
	export function createActionThunk<T1, T2, T3>(type: string, fn: (v1: T1, v2: T2, v3: T3) => any, ...args: any): {
		(v1: T1, v2: T2, v3: T3): any
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
	export function createActionThunk<T1, T2, T3, T4>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4) => any, ...args: any): {
		(v1: T1, v2: T2, v3: T3, v4: T4): any
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
	export function createActionThunk<T1, T2, T3, T4, T5>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4, v5: T5) => any, ...args: any): {
		(v1: T1, v2: T2, v3: T3, v4: T4, v5: T5): any
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
	export function createActionThunk<T1, T2, T3, T4, T5, T6>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => any, ...args: any): {
		(v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6): any
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
	export function createActionThunk<T1, T2, T3, T4, T5, T6, T7>(type: string, fn: (v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => any, ...args: any): {
		(v1: T1, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7): any
		readonly NAME: string
		readonly START: string
		readonly SUCCEEDED: string
		readonly FAILED: string
		readonly ENDED: string
	};
}

Thanks to @nodren for his initial work. I might work on a NPM package in the future.

DocCaliban avatar Apr 13 '19 18:04 DocCaliban

or

declare module 'redux-thunk-actions' {
  import { AnyAction, Dispatch } from 'redux';

  export function createActionThunk(
    type: string,
    fn: () => any,
  ): {
    (): Promise<any>;
    readonly NAME: string;
    readonly START: string;
    readonly SUCCEEDED: string;
    readonly FAILED: string;
    readonly ENDED: string;
  };
  export function createActionThunk<T1>(
    type: string,
    fn: (v1: T1, { dispatch, getState, extra }: ThunkType) => any,
    ...args: any
  ): {
    (v1: T1, v2?: ThunkType): Promise<any>;
    readonly NAME: string;
    readonly START: string;
    readonly SUCCEEDED: string;
    readonly FAILED: string;
    readonly ENDED: string;
  };
  export function createActionThunk<T1, T2>(
    type: string,
    fn: (v1: T1, v2: T2, { dispatch, getState, extra }: ThunkType) => any,
    ...args: any
  ): {
    (v1: T1, v2: T2, v3?: ThunkType): Promise<any>;
    readonly NAME: string;
    readonly START: string;
    readonly SUCCEEDED: string;
    readonly FAILED: string;
    readonly ENDED: string;
  };
  export function createActionThunk<T1, T2, T3>(
    type: string,
    fn: (
      v1: T1,
      v2: T2,
      v3: T3,
      { dispatch, getState, extra }: ThunkType,
    ) => any,
    ...args: any
  ): {
    (v1: T1, v2: T2, v3: T3, v4?: ThunkType): Promise<any>;
    readonly NAME: string;
    readonly START: string;
    readonly SUCCEEDED: string;
    readonly FAILED: string;
    readonly ENDED: string;
  };
  export function createActionThunk<T1, T2, T3, T4>(
    type: string,
    fn: (
      v1: T1,
      v2: T2,
      v3: T3,
      v4: T4,
      { dispatch, getState, extra }: ThunkType,
    ) => any,
    ...args: any
  ): {
    (v1: T1, v2: T2, v3: T3, v4: T4, v5?: ThunkType): Promise<any>;
    readonly NAME: string;
    readonly START: string;
    readonly SUCCEEDED: string;
    readonly FAILED: string;
    readonly ENDED: string;
  };

  export type ThunkType = {
    dispatch: Dispatch<AnyAction>;
    getState: <T>() => T;
    extra: boolean;
  };
}

stelmakhivan avatar Oct 24 '20 11:10 stelmakhivan