Skip to content

Instantly share code, notes, and snippets.

@quicksnap
Last active January 16, 2018 00:53
Show Gist options
  • Save quicksnap/314e081cb72a14e65ff1e077618ec92a to your computer and use it in GitHub Desktop.
Save quicksnap/314e081cb72a14e65ff1e077618ec92a to your computer and use it in GitHub Desktop.
function _makeActionInternal<Z extends {}>(type: string, typePrefix = '') {
return <X extends (...args: any[]) => Z>(fn: X) => {
const returnFn: IActionType<X> = (
(...args: any[]) => ({ ...(fn as any)(...args), type })
) as any;
returnFn.__actionType = typePrefix + type;
return returnFn;
};
}
// Create normal actions
export function makeAction<Z>(type: string) {
return _makeActionInternal<{ payload: Z }>(type);
}
// Create pack actions
export function makePackAction<T>(type: string) {
return _makeActionInternal<{
meta?: { [key: string]: any };
promise: Promise<T>;
}>(type, 'PACK_');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment