diff --git a/Libraries/Components/ScrollView/ScrollView.js b/Libraries/Components/ScrollView/ScrollView.js index b4298158b33..b15584381de 100644 --- a/Libraries/Components/ScrollView/ScrollView.js +++ b/Libraries/Components/ScrollView/ScrollView.js @@ -64,7 +64,21 @@ if (Platform.OS === 'android') { } export type ScrollResponderType = { - ...ScrollView, + // We'd like to do ...ScrollView here, however Flow doesn't seem + // to see the imperative methods of ScrollView that way. Workaround the + // issue by specifying them manually. + getScrollableNode: $PropertyType, + getInnerViewNode: $PropertyType, + getNativeScrollRef: $PropertyType, + + setNativeProps: $PropertyType, + scrollTo: $PropertyType, + scrollWithoutAnimationTo: $PropertyType< + ScrollView, + 'scrollWithoutAnimationTo', + >, + flashScrollIndicators: $PropertyType, + ...typeof ScrollResponder.Mixin, }; diff --git a/Libraries/Lists/FlatList.js b/Libraries/Lists/FlatList.js index 3afed1ba5a7..41354f7e53c 100644 --- a/Libraries/Lists/FlatList.js +++ b/Libraries/Lists/FlatList.js @@ -18,6 +18,7 @@ const StyleSheet = require('../StyleSheet/StyleSheet'); const invariant = require('invariant'); +import type {ScrollResponderType} from '../Components/ScrollView/ScrollView'; import type {ViewStyleProp} from '../StyleSheet/StyleSheet'; import type { ViewabilityConfig, @@ -441,7 +442,7 @@ class FlatList extends React.PureComponent, void> { /** * Provides a handle to the underlying scroll responder. */ - getScrollResponder(): any { + getScrollResponder(): ?ScrollResponderType { if (this._listRef) { return this._listRef.getScrollResponder(); } diff --git a/Libraries/Lists/SectionList.js b/Libraries/Lists/SectionList.js index 99b621a2eb3..d9ef718090a 100644 --- a/Libraries/Lists/SectionList.js +++ b/Libraries/Lists/SectionList.js @@ -14,6 +14,7 @@ const React = require('react'); const ScrollView = require('../Components/ScrollView/ScrollView'); const VirtualizedSectionList = require('./VirtualizedSectionList'); +import type {ScrollResponderType} from '../Components/ScrollView/ScrollView'; import type {ViewToken} from './ViewabilityHelper'; import type { SectionBase as _SectionBase, @@ -275,7 +276,7 @@ class SectionList> extends React.PureComponent< /** * Provides a handle to the underlying scroll responder. */ - getScrollResponder(): ?ScrollView { + getScrollResponder(): ?ScrollResponderType { const listRef = this._wrapperListRef && this._wrapperListRef.getListRef(); if (listRef) { return listRef.getScrollResponder(); diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js index 7dffc1729ef..62f614ec06e 100644 --- a/Libraries/Lists/VirtualizedList.js +++ b/Libraries/Lists/VirtualizedList.js @@ -27,6 +27,7 @@ const warning = require('fbjs/lib/warning'); const {computeWindowedRenderLimits} = require('./VirtualizeUtils'); +import type {ScrollResponderType} from '../Components/ScrollView/ScrollView'; import type {ViewStyleProp} from '../StyleSheet/StyleSheet'; import type { ViewabilityConfig, @@ -431,7 +432,7 @@ class VirtualizedList extends React.PureComponent { * Note that `this._scrollRef` might not be a `ScrollView`, so we * need to check that it responds to `getScrollResponder` before calling it. */ - getScrollResponder(): any { + getScrollResponder(): ?ScrollResponderType { if (this._scrollRef && this._scrollRef.getScrollResponder) { return this._scrollRef.getScrollResponder(); }