У меня есть BaseComponent, который наследуется от React.Component
. Все остальные компоненты приложения наследуются от BaseComponent
. Мне нужно ввести BaseComponent
, чтобы другие компоненты, наследуемые от него, обрабатывались как компоненты React потоком. Это то, что я в настоящее время:Как наследовать от пользовательского компонента React без потери информации о типе потока?
class BaseComponent<P, S> extends React.Component<$Shape<P>, P, S> {
...
}
class OtherComponent extends BaseComponent {
props: {};
state: {}:
...
}
Вот working example. Правильно проверяет опоры, состояние и т. Д. В OtherComponent
.
В BaseComponent, однако, я получаю непонятные ошибки:
S: This type is incompatible with 'undefined. Did you forget to declare S?
P: This type is incompatible with 'undefined. Did you forget to declare P?
Did you forget to declare some incompatible instantiation of
S?: This type is incompatible with 'some incompatible instantiation of
S'
Я пытаюсь понять сообщение об ошибках. Любая помощь будет принята с благодарностью.
Вы параметризовали 'BaseComponent' с' P' и 'S'. Вам необходимо предоставить значения для этого, когда вы расширяете 'BaseComponent'. См. Https://flowtype.org/docs/classes.html#polymorphic-classes. –
@FelixKling Спасибо! Я передаю значения типа. Я добавил пример flowtype.org/try, демонстрирующий проблему. Чтобы уточнить, что я делаю, поток корректно набирает 'OtherComponent', но показывает ошибки для' BaseComponent'. См. Рабочий пример. – alden