Improve Flow Type for ScrollResponder

Summary: FlatList and VirtualizedList were typing this value as any instead of using the actual type from ScrollView. I started with that change and then fixed the type to solve the other callsites in the codebase.

Reviewed By: zackargyle

Differential Revision: D17089934

fbshipit-source-id: bfc22cec9993904d779cad37b1de7cb3c0484d2c
This commit is contained in:
Eli White
2019-08-28 13:14:00 -07:00
committed by grabbou
parent 1b39f67896
commit 54bf3ae1cf
4 changed files with 21 additions and 4 deletions
+15 -1
View File
@@ -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<ScrollView, 'getScrollableNode'>,
getInnerViewNode: $PropertyType<ScrollView, 'getInnerViewNode'>,
getNativeScrollRef: $PropertyType<ScrollView, 'getNativeScrollRef'>,
setNativeProps: $PropertyType<ScrollView, 'setNativeProps'>,
scrollTo: $PropertyType<ScrollView, 'scrollTo'>,
scrollWithoutAnimationTo: $PropertyType<
ScrollView,
'scrollWithoutAnimationTo',
>,
flashScrollIndicators: $PropertyType<ScrollView, 'flashScrollIndicators'>,
...typeof ScrollResponder.Mixin,
};
+2 -1
View File
@@ -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<ItemT> extends React.PureComponent<Props<ItemT>, void> {
/**
* Provides a handle to the underlying scroll responder.
*/
getScrollResponder(): any {
getScrollResponder(): ?ScrollResponderType {
if (this._listRef) {
return this._listRef.getScrollResponder();
}
+2 -1
View File
@@ -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<SectionT: SectionBase<any>> 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();
+2 -1
View File
@@ -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<Props, State> {
* 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();
}