Ошибки потока, когда компонентный элемент со значением по умолчанию подключен к реактиву - PullRequest
0 голосов
/ 06 июня 2018

с использованием:

  • поток 0,67,1
  • реагирует 16,3,1
  • реагирует на 5,0,7

потоквозвращает ошибку несовместимости типов, когда свойство компонента реагирования, имеющее значение по умолчанию, подключено по программе response-redux.

Ошибка имеет вид:

undefined 1 несовместим с номером 2 .

Вот мой пример кода:

type MyProps = {
  myProp: number,
};

class MyComponent extends Component<MyProps> {
  static defaultProps = { myProp: 123 }
}

const myMapStateToProps = ({ someStateNumber }: { someStateNumber: number }): { myProp: number } => ({
  myProp: someStateNumber
});

const MyContainer = connect(myMapStateToProps)(MyComponent);

Я думаю, что это связано сспособ определения функции connect в потоке с типом lib def .

declare export function connect<
  Com: ComponentType<*>,
  S: Object,
  DP: Object,
  RSP: Object,
  CP: $Diff<OmitDispatch<ElementConfig<Com>>, RSP>
  >(
  mapStateToProps: MapStateToProps<S, DP, RSP>,
  mapDispatchToProps?: null
): (component: Com) => ComponentType<CP & DP>;

Наиболее важные строки:

CP: $Diff<OmitDispatch<ElementConfig<Com>>, RSP>

Универсальный параметр CP состоит из компонентов компонента, которые не имеют значений по умолчанию ( doc для типа ElementConfig ), за исключением свойств, обрабатываемых mapStateToProps.OmitDispatch также удалит реквизит с именем dispatch ..., которое можно игнорировать в этом примере.

и:

): (component: Com) => ComponentType<CP & DP>;

, который определяет ComponentTypeс подпорками, которые состоят из союза между общим параметром CP и DP.DP - это тип необязательного второго параметра ownArgs, передаваемого в функцию myMapStateToProps.DP можно игнорировать, поскольку он не используется в функции myMapStateToProps samples.

В моем примере это приводит к типу ComponentType, у которого нет реквизита, поскольку его единственное свойство имеет значение по умолчанию.

Я попытался поэкспериментировать с $Diff и ElementConfig на веб-сайте Flow, и придумал this .Я думаю, что это та же проблема.

Для автора компонента, который никогда не следует использовать без response-redux, решение состоит в том, чтобы просто удалить значения по умолчанию, но что, если это не всегда так?Они могут быть сторонними компонентами или компонентами, которые используются без response-redux.

Что мне здесь не хватает?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...