И каждая возможная комбинация ограничений для этих параметров типа. Учитывая, что ограничения могут зависеть от параметров других типов, это потребует фальсификации типов с более высоким родом.

ct with material-ui я пытаюсь создать компонент JSX, который принимает общие параметры, а также используетwithStyles HOC, чтобы ввести мои стили.

Первый подход был такой:

const styles = (theme: Theme) => createStyles({
  card:    {
    ...
  }
});

interface Props<T> {
  prop: keyof T,
  ...
}

type PropsWithStyles<T> = Props<T> & WithStyles<typeof styles>;

export default withStyles(styles)(
    class BaseFormCard<T> extends React.Component<PropsWithStyles<T>> {
      ...
    }
),

Но при попытке использовать общие типы теряются

<BaseFormCard<MyClass> prop={ /* no typings here */ } />

Единственное решение, которое я смог найти, заключалось в том, чтобы обернуть экспорт в функцию, которая принимает универсальный параметр и создает компонент.

export default function WrappedBaseFormCard<T>(props: Props<T>): ReactElement<Props<T>> {

  const wrapper = withStyles(styles)(
        class BaseFormCard<T> extends React.Component<PropsWithStyles<T>> {
          ...
        }
    ) as any;

  return React.createElement(wrapper, props);
}

Однако это нелепо сложно и даже связано с затратами времени выполнения, хотя оно только пытается решить проблемы набора текста.

Должен быть лучший способ использовать компоненты JSX с общими параметрами и HOC.

Это тесно связано с проблемой здесьhttps://github.com/mui-org/material-ui/issues/11921, но никогда не было удовлетворительного решения, и проблема сейчас закрыта.

Ответы на вопрос(3)

Ваш ответ на вопрос