redux.ts 873 B

12345678910111213141516171819202122232425
  1. type ReturnTypes<EnumTypes> = {
  2. [key in keyof EnumTypes]: key
  3. }
  4. export function createTypes<EnumTypes> (enumTypes: EnumTypes): ReturnTypes<EnumTypes> {
  5. // @FIXME temporarily not use Proxy to avoid schedule screenshot error for not support ES6 Proxy
  6. // return new Proxy(enumTypes as any, {
  7. // get (_, property: any) {
  8. // return enumTypes[property]
  9. // }
  10. // })
  11. return Object.entries(enumTypes as any).reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {}) as ReturnTypes<EnumTypes>
  12. }
  13. type ActionCreatorMap<ActionMap> = {
  14. [key in keyof ActionMap]: (arg2?: any, arg3?: any, arg4?: any, arg5?: any, arg6?: any, arg7?: any) => ActionMap[key]
  15. }
  16. type ValueOf<ActionMap> = ActionMap[keyof ActionMap]
  17. export function returnType<ActionMap> (actions: ActionCreatorMap<ActionMap>) {
  18. type Action = ValueOf<ActionMap>
  19. return {} as any as Action
  20. }