Определение обобщенных наблюдателей mobx-реакции-lite для реквизита - PullRequest
0 голосов
/ 12 апреля 2019

Невозможно определить прототипы наблюдателя с помощью mobx-реагировать-lite.

Я пытался использовать обобщенные значения для функции наблюдателя, но она выдает ошибку.

Делать что-то подобное хорошо:

import { observer } from 'mobx-react-lite';

type PassedProps = {
  foo: string,
  num: number
}
const Element = (props: PassedProps) => null;
observer<PassedProps>(Element)

Но в более сложном примере:

import { observer } from 'mobx-react-lite';

import { StoreContext } from 'index';

export function connect<MappedProps, PassedProps> (
  mapStoreToProps: (store: any, ownProps:PassedProps) => MappedProps,
  UIComponent: React.FunctionComponent<MappedProps & PassedProps>
) {
  const WrappedComponent = (props: PassedProps) => {
    const store = React.useContext(StoreContext);
    const mapped = mapStoreToProps(store, props);
    return UIComponent({...mapped, ...props});
  }
  return observer<PassedProps>(WrappedComponent);
}

Это ошибки:

Type 'PassedProps' does not satisfy the constraint 'object'

1 Ответ

0 голосов
/ 12 апреля 2019

Конечно, я понял это сейчас. Я должен был определить ограничения общих типов:

export function connect<MappedProps extends object, PassedProps extends object> (
  mapStoreToProps: (store: any, ownProps:PassedProps) => MappedProps,
  UIComponent: React.FunctionComponent<MappedProps & PassedProps>
) {
  const WrappedComponent = (props: PassedProps) => {
    const store = React.useContext(StoreContext);
    const mapped = mapStoreToProps(store, props);
    return UIComponent({...mapped, ...props});
  }
  return observer<PassedProps>(WrappedComponent);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...