Общие типы со стилем без точек для реагирующих компонентов в Typescript - PullRequest
0 голосов
/ 10 октября 2018

Я большой поклонник стиля без очков и комбинации рекомпозиций, lodash / fp и реагирования.Недавно перешел на машинописный текст и с трудом опускаю дополнительную упаковку функций общими вещами. Например:

import * as QueryAllExercises from '@ease/api/GraphQL/queryGetAllExercises.gql';
import { getOr } from 'lodash/fp';
import { graphql } from 'react-apollo';
import { compose } from 'recompose';
import { Exercise } from 'src/Exercises';

interface WithExercises {
  exercises: Exercise[];
};

const withExercises = <TOutter extends object>(Comp: React.ComponentType<TOutter & WithExercises>) => compose<TOutter & WithExercises, TOutter>(
  graphql(
    QueryAllExercises,
    {
      options: {
        fetchPolicy: 'cache-and-network',
      },
      props: resp => ({ exercises: getOr([], 'data.listExercises.items', resp) }),
    },
  ),
)(Comp);

export default withExercises;

Интересно, есть ли другой способ напечатать это, без функции дополнительной стрелки, что-то вроде (которыйочевидно не работает):

import * as QueryAllExercises from '@ease/api/GraphQL/queryGetAllExercises.gql';
import { getOr } from 'lodash/fp';
import { graphql } from 'react-apollo';
import { compose } from 'recompose';
import { Exercise } from 'src/Exercises';

interface WithExercises {
  exercises: Exercise[];
};

const withExercises = <TOutter>compose<TOutter & WithExercises, TOutter>(
  graphql(
    QueryAllExercises,
    {
      options: {
        fetchPolicy: 'cache-and-network',
      },
      props: resp => ({ exercises: getOr([], 'data.listExercises.items', resp) }),
    },
  ),
);

export default withExercises;
...