с использованием:
- поток 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.
Что мне здесь не хватает?
Спасибо!