From cbd2ee55ef9b1cc85573a2fd1626b7bc0b1178c8 Mon Sep 17 00:00:00 2001 From: Sam Zhou Date: Tue, 25 Mar 2025 14:00:17 -0700 Subject: [PATCH] Eliminate $PropertyType and `$ElementType` in react-native (#50262) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50262 Prepare for their removal in Flow Changelog: [Internal] Reviewed By: gkz Differential Revision: D71823860 fbshipit-source-id: e1e18424ae731cd323999316a7f3a5d42f4b5b91 --- .../GeneratePropsJavaPojo/PojoCollector.js | 6 +- .../Libraries/AppState/AppState.js | 2 +- .../AccessibilityInfo/AccessibilityInfo.js | 2 +- .../Libraries/Components/Keyboard/Keyboard.js | 2 +- .../Components/Pressable/Pressable.js | 2 +- .../Components/ScrollView/ScrollView.js | 23 ++-- .../EventEmitter/NativeEventEmitter.js | 4 +- .../__mocks__/NativeEventEmitter.js | 4 +- .../Libraries/Interaction/PanResponder.js | 2 +- .../react-native/Libraries/Linking/Linking.js | 2 +- .../react-native/Libraries/Lists/FlatList.js | 17 ++- .../Libraries/Lists/SectionList.js | 22 +--- .../Libraries/Lists/SectionListModern.js | 22 +--- .../Network/RCTNetworking.android.js | 2 +- .../Libraries/Network/RCTNetworking.ios.js | 2 +- .../Libraries/Network/RCTNetworking.js.flow | 2 +- .../Libraries/Pressability/Pressability.js | 2 +- .../Libraries/StyleSheet/StyleSheet.js | 2 +- .../Libraries/StyleSheet/StyleSheet.js.flow | 2 +- .../Utilities/ReactNativeTestTools.js | 2 +- .../__snapshots__/public-api-test.js.snap | 106 ++++++------------ .../js/components/RNTPressableRow.js | 2 +- .../Animated/utils/ToggleNativeDriver.js | 7 +- .../FlatList-BaseOnViewableItemsChanged.js | 2 +- .../SectionList-BaseOnViewableItemsChanged.js | 2 +- .../Lists/VirtualizedSectionList.js | 9 +- 26 files changed, 78 insertions(+), 174 deletions(-) diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaPojo/PojoCollector.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaPojo/PojoCollector.js index 23cddf45bb2..17c717e2e0f 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaPojo/PojoCollector.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaPojo/PojoCollector.js @@ -112,10 +112,8 @@ class PojoCollector { } case 'ArrayTypeAnnotation': { const arrayTypeAnnotation = typeAnnotation; - const elementType: $PropertyType< - ComponentArrayTypeAnnotation, - 'elementType', - > = arrayTypeAnnotation.elementType; + const elementType: ComponentArrayTypeAnnotation['elementType'] = + arrayTypeAnnotation.elementType; const pojoElementType = (() => { switch (elementType.type) { diff --git a/packages/react-native/Libraries/AppState/AppState.js b/packages/react-native/Libraries/AppState/AppState.js index 916013306ae..4cebbd9ab53 100644 --- a/packages/react-native/Libraries/AppState/AppState.js +++ b/packages/react-native/Libraries/AppState/AppState.js @@ -107,7 +107,7 @@ class AppStateImpl { */ addEventListener( type: K, - handler: (...$ElementType) => void, + handler: (...AppStateEventDefinitions[K]) => void, ): EventSubscription { const emitter = this._emitter; if (emitter == null) { diff --git a/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js b/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js index c42e4ac4afb..00f0cf3acea 100644 --- a/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +++ b/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js @@ -397,7 +397,7 @@ const AccessibilityInfo = { addEventListener>( eventName: K, // $FlowIssue[incompatible-type] - Flow bug with unions and generics (T128099423) - handler: (...$ElementType) => void, + handler: (...AccessibilityEventDefinitions[K]) => void, ): EventSubscription { const deviceEventName = EventNames.get(eventName); return deviceEventName == null diff --git a/packages/react-native/Libraries/Components/Keyboard/Keyboard.js b/packages/react-native/Libraries/Components/Keyboard/Keyboard.js index 1bf9a591aff..4270b54cee4 100644 --- a/packages/react-native/Libraries/Components/Keyboard/Keyboard.js +++ b/packages/react-native/Libraries/Components/Keyboard/Keyboard.js @@ -148,7 +148,7 @@ class Keyboard { */ addListener>( eventType: K, - listener: (...$ElementType) => mixed, + listener: (...KeyboardEventDefinitions[K]) => mixed, context?: mixed, ): EventSubscription { return this._emitter.addListener(eventType, listener); diff --git a/packages/react-native/Libraries/Components/Pressable/Pressable.js b/packages/react-native/Libraries/Components/Pressable/Pressable.js index 8690fafc828..29e71f0c08a 100644 --- a/packages/react-native/Libraries/Components/Pressable/Pressable.js +++ b/packages/react-native/Libraries/Components/Pressable/Pressable.js @@ -26,7 +26,7 @@ import useAndroidRippleForView, { import * as React from 'react'; import {useMemo, useRef, useState} from 'react'; -type ViewStyleProp = $ElementType, 'style'>; +type ViewStyleProp = React.ElementConfig['style']; export type PressableStateCallbackType = $ReadOnly<{ pressed: boolean, diff --git a/packages/react-native/Libraries/Components/ScrollView/ScrollView.js b/packages/react-native/Libraries/Components/ScrollView/ScrollView.js index 1d9dfc33778..4121422e539 100644 --- a/packages/react-native/Libraries/Components/ScrollView/ScrollView.js +++ b/packages/react-native/Libraries/Components/ScrollView/ScrollView.js @@ -134,19 +134,16 @@ export interface ScrollViewScrollToOptions { // Public methods for ScrollView export interface ScrollViewImperativeMethods { - +getScrollResponder: $PropertyType; - +getScrollableNode: $PropertyType; - +getInnerViewNode: $PropertyType; - +getInnerViewRef: $PropertyType; - +getNativeScrollRef: $PropertyType; - +scrollTo: $PropertyType; - +scrollToEnd: $PropertyType; - +flashScrollIndicators: $PropertyType; - +scrollResponderZoomTo: $PropertyType; - +scrollResponderScrollNativeHandleToKeyboard: $PropertyType< - ScrollView, - 'scrollResponderScrollNativeHandleToKeyboard', - >; + +getScrollResponder: ScrollView['getScrollResponder']; + +getScrollableNode: ScrollView['getScrollableNode']; + +getInnerViewNode: ScrollView['getInnerViewNode']; + +getInnerViewRef: ScrollView['getInnerViewRef']; + +getNativeScrollRef: ScrollView['getNativeScrollRef']; + +scrollTo: ScrollView['scrollTo']; + +scrollToEnd: ScrollView['scrollToEnd']; + +flashScrollIndicators: ScrollView['flashScrollIndicators']; + +scrollResponderZoomTo: ScrollView['scrollResponderZoomTo']; + +scrollResponderScrollNativeHandleToKeyboard: ScrollView['scrollResponderScrollNativeHandleToKeyboard']; } export type DecelerationRateType = 'fast' | 'normal' | number; diff --git a/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js b/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js index 28b19aaf607..2e901e75ac4 100644 --- a/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js +++ b/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js @@ -80,7 +80,7 @@ export default class NativeEventEmitter< addListener>( eventType: TEvent, - listener: (...args: $ElementType) => mixed, + listener: (...args: TEventToArgsMap[TEvent]) => mixed, context?: mixed, ): EventSubscription { this._nativeModule?.addListener(eventType); @@ -104,7 +104,7 @@ export default class NativeEventEmitter< emit>( eventType: TEvent, - ...args: $ElementType + ...args: TEventToArgsMap[TEvent] ): void { // Generally, `RCTDeviceEventEmitter` is directly invoked. But this is // included for completeness. diff --git a/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js b/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js index 1b6196cb93f..7769d5b6a94 100644 --- a/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +++ b/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js @@ -24,7 +24,7 @@ export default class NativeEventEmitter< { addListener>( eventType: TEvent, - listener: (...args: $ElementType) => mixed, + listener: (...args: TEventToArgsMap[TEvent]) => mixed, context?: mixed, ): EventSubscription { return RCTDeviceEventEmitter.addListener(eventType, listener, context); @@ -32,7 +32,7 @@ export default class NativeEventEmitter< emit>( eventType: TEvent, - ...args: $ElementType + ...args: TEventToArgsMap[TEvent] ): void { RCTDeviceEventEmitter.emit(eventType, ...args); } diff --git a/packages/react-native/Libraries/Interaction/PanResponder.js b/packages/react-native/Libraries/Interaction/PanResponder.js index da9200d509c..05a718aad91 100644 --- a/packages/react-native/Libraries/Interaction/PanResponder.js +++ b/packages/react-native/Libraries/Interaction/PanResponder.js @@ -333,7 +333,7 @@ const PanResponder = { */ _updateGestureStateOnMove( gestureState: PanResponderGestureState, - touchHistory: $PropertyType, + touchHistory: GestureResponderEvent['touchHistory'], ) { gestureState.numberActiveTouches = touchHistory.numberActiveTouches; gestureState.moveX = currentCentroidXOfTouchesChangedAfter( diff --git a/packages/react-native/Libraries/Linking/Linking.js b/packages/react-native/Libraries/Linking/Linking.js index b42b38d322f..92c4fb57ca4 100644 --- a/packages/react-native/Libraries/Linking/Linking.js +++ b/packages/react-native/Libraries/Linking/Linking.js @@ -34,7 +34,7 @@ class LinkingImpl extends NativeEventEmitter { */ addEventListener>( eventType: K, - listener: (...$ElementType) => mixed, + listener: (...LinkingEventDefinitions[K]) => mixed, ): EventSubscription { return this.addListener(eventType, listener); } diff --git a/packages/react-native/Libraries/Lists/FlatList.js b/packages/react-native/Libraries/Lists/FlatList.js index d1240ae6f97..46a061e3e48 100644 --- a/packages/react-native/Libraries/Lists/FlatList.js +++ b/packages/react-native/Libraries/Lists/FlatList.js @@ -184,17 +184,14 @@ type FlatListBaseProps = { type VirtualizedListProps = React.ElementConfig; export type FlatListProps = { - ...$Diff< + ...Omit< VirtualizedListProps, - { - data: $PropertyType, - getItem: $PropertyType, - getItemCount: $PropertyType, - getItemLayout: $PropertyType, - renderItem: $PropertyType, - keyExtractor: $PropertyType, - ... - }, + | 'data' + | 'getItem' + | 'getItemCount' + | 'getItemLayout' + | 'renderItem' + | 'keyExtractor', >, ...FlatListBaseProps, ... diff --git a/packages/react-native/Libraries/Lists/SectionList.js b/packages/react-native/Libraries/Lists/SectionList.js index 94cc03546d8..1d06b959897 100644 --- a/packages/react-native/Libraries/Lists/SectionList.js +++ b/packages/react-native/Libraries/Lists/SectionList.js @@ -106,27 +106,9 @@ type OptionalProps = { }; export type SectionListProps = { - ...$Diff< + ...Omit< VirtualizedSectionListProps, - { - getItem: $PropertyType< - VirtualizedSectionListProps, - 'getItem', - >, - getItemCount: $PropertyType< - VirtualizedSectionListProps, - 'getItemCount', - >, - renderItem: $PropertyType< - VirtualizedSectionListProps, - 'renderItem', - >, - keyExtractor: $PropertyType< - VirtualizedSectionListProps, - 'keyExtractor', - >, - ... - }, + 'getItem' | 'getItemCount' | 'renderItem' | 'keyExtractor', >, ...RequiredProps, ...OptionalProps, diff --git a/packages/react-native/Libraries/Lists/SectionListModern.js b/packages/react-native/Libraries/Lists/SectionListModern.js index b884d3ac0f3..1a6f4daa401 100644 --- a/packages/react-native/Libraries/Lists/SectionListModern.js +++ b/packages/react-native/Libraries/Lists/SectionListModern.js @@ -102,27 +102,9 @@ type OptionalProps = { }; export type Props = $ReadOnly<{ - ...$Diff< + ...Omit< VirtualizedSectionListProps, - { - getItem: $PropertyType< - VirtualizedSectionListProps, - 'getItem', - >, - getItemCount: $PropertyType< - VirtualizedSectionListProps, - 'getItemCount', - >, - renderItem: $PropertyType< - VirtualizedSectionListProps, - 'renderItem', - >, - keyExtractor: $PropertyType< - VirtualizedSectionListProps, - 'keyExtractor', - >, - ... - }, + 'getItem' | 'getItemCount' | 'renderItem' | 'keyExtractor', >, ...RequiredProps, ...OptionalProps, diff --git a/packages/react-native/Libraries/Network/RCTNetworking.android.js b/packages/react-native/Libraries/Network/RCTNetworking.android.js index 798ee2177de..c8e3768bbd8 100644 --- a/packages/react-native/Libraries/Network/RCTNetworking.android.js +++ b/packages/react-native/Libraries/Network/RCTNetworking.android.js @@ -50,7 +50,7 @@ const emitter = new NativeEventEmitter<$FlowFixMe>( const RCTNetworking = { addListener>( eventType: K, - listener: (...$ElementType) => mixed, + listener: (...RCTNetworkingEventDefinitions[K]) => mixed, context?: mixed, ): EventSubscription { // $FlowFixMe[incompatible-call] diff --git a/packages/react-native/Libraries/Network/RCTNetworking.ios.js b/packages/react-native/Libraries/Network/RCTNetworking.ios.js index e5b2dd572ff..40035ff1f6a 100644 --- a/packages/react-native/Libraries/Network/RCTNetworking.ios.js +++ b/packages/react-native/Libraries/Network/RCTNetworking.ios.js @@ -20,7 +20,7 @@ import {type NativeResponseType} from './XMLHttpRequest'; const RCTNetworking = { addListener>( eventType: K, - listener: (...$ElementType) => mixed, + listener: (...RCTNetworkingEventDefinitions[K]) => mixed, context?: mixed, ): EventSubscription { // $FlowFixMe[incompatible-call] diff --git a/packages/react-native/Libraries/Network/RCTNetworking.js.flow b/packages/react-native/Libraries/Network/RCTNetworking.js.flow index 75b67d51989..59e4a0b3924 100644 --- a/packages/react-native/Libraries/Network/RCTNetworking.js.flow +++ b/packages/react-native/Libraries/Network/RCTNetworking.js.flow @@ -19,7 +19,7 @@ declare const RCTNetworking: interface { addListener>( eventType: K, // $FlowFixMe[invalid-computed-prop] - listener: (...$ElementType) => mixed, + listener: (...RCTNetworkingEventDefinitions[K]) => mixed, context?: mixed, ): EventSubscription, diff --git a/packages/react-native/Libraries/Pressability/Pressability.js b/packages/react-native/Libraries/Pressability/Pressability.js index 24614858116..ef8ad8cbe17 100644 --- a/packages/react-native/Libraries/Pressability/Pressability.js +++ b/packages/react-native/Libraries/Pressability/Pressability.js @@ -829,7 +829,7 @@ export default class Pressability { }; _isTouchWithinResponderRegion( - touch: $PropertyType, + touch: GestureResponderEvent['nativeEvent'], responderRegion: $ReadOnly<{ bottom: number, left: number, diff --git a/packages/react-native/Libraries/StyleSheet/StyleSheet.js b/packages/react-native/Libraries/StyleSheet/StyleSheet.js index b9227c33e11..6bc121ade9d 100644 --- a/packages/react-native/Libraries/StyleSheet/StyleSheet.js +++ b/packages/react-native/Libraries/StyleSheet/StyleSheet.js @@ -118,7 +118,7 @@ export type DangerouslyImpreciseStyleProp = */ export type TypeForStyleKey< +key: $Keys<____DangerouslyImpreciseStyle_Internal>, -> = $ElementType<____DangerouslyImpreciseStyle_Internal, key>; +> = ____DangerouslyImpreciseStyle_Internal[key]; /** * This type is an object of the different possible style diff --git a/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow b/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow index dc213592f72..65ea53e63cf 100644 --- a/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow +++ b/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow @@ -120,7 +120,7 @@ export type DangerouslyImpreciseStyleProp = */ export type TypeForStyleKey< +key: $Keys<____DangerouslyImpreciseStyle_Internal>, -> = $ElementType<____DangerouslyImpreciseStyle_Internal, key>; +> = ____DangerouslyImpreciseStyle_Internal[key]; /** * This type is an object of the different possible style diff --git a/packages/react-native/Libraries/Utilities/ReactNativeTestTools.js b/packages/react-native/Libraries/Utilities/ReactNativeTestTools.js index e59ab346fcf..d639234350b 100644 --- a/packages/react-native/Libraries/Utilities/ReactNativeTestTools.js +++ b/packages/react-native/Libraries/Utilities/ReactNativeTestTools.js @@ -22,7 +22,7 @@ const View = require('../Components/View/View').default; const Text = require('../Text/Text').default; const {VirtualizedList} = require('@react-native/virtualized-lists').default; -export type ReactTestInstance = $PropertyType; +export type ReactTestInstance = ReactTestRendererType['root']; export type Predicate = (node: ReactTestInstance) => boolean; /* $FlowFixMe[value-as-type] (>=0.125.1 site=react_native_fb) This comment * suppresses an error found when Flow v0.125.1 was deployed. To see the error, diff --git a/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap b/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap index a478a84eba5..2e61b1bf83a 100644 --- a/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap +++ b/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap @@ -1076,7 +1076,7 @@ declare class AppStateImpl { constructor(): void; addEventListener( type: K, - handler: (...$ElementType) => void + handler: (...AppStateEventDefinitions[K]) => void ): EventSubscription; } declare const AppState: AppStateImpl; @@ -1432,7 +1432,7 @@ declare const AccessibilityInfo: { isAccessibilityServiceEnabled(): Promise, addEventListener>( eventName: K, - handler: (...$ElementType) => void + handler: (...AccessibilityEventDefinitions[K]) => void ): EventSubscription, setAccessibilityFocus(reactTag: number): void, sendAccessibilityEvent( @@ -1667,7 +1667,7 @@ declare class Keyboard { constructor(): void; addListener>( eventType: K, - listener: (...$ElementType) => mixed, + listener: (...KeyboardEventDefinitions[K]) => mixed, context?: mixed ): EventSubscription; removeAllListeners>(eventType: ?K): void; @@ -1731,7 +1731,7 @@ declare export default typeof LayoutConformanceNativeComponent; `; exports[`public API should not change unintentionally Libraries/Components/Pressable/Pressable.js 1`] = ` -"type ViewStyleProp = $ElementType, \\"style\\">; +"type ViewStyleProp = React.ElementConfig[\\"style\\"]; export type PressableStateCallbackType = $ReadOnly<{ pressed: boolean, }>; @@ -1930,19 +1930,16 @@ exports[`public API should not change unintentionally Libraries/Components/Scrol animated?: boolean; } export interface ScrollViewImperativeMethods { - +getScrollResponder: $PropertyType; - +getScrollableNode: $PropertyType; - +getInnerViewNode: $PropertyType; - +getInnerViewRef: $PropertyType; - +getNativeScrollRef: $PropertyType; - +scrollTo: $PropertyType; - +scrollToEnd: $PropertyType; - +flashScrollIndicators: $PropertyType; - +scrollResponderZoomTo: $PropertyType; - +scrollResponderScrollNativeHandleToKeyboard: $PropertyType< - ScrollView, - \\"scrollResponderScrollNativeHandleToKeyboard\\", - >; + +getScrollResponder: ScrollView[\\"getScrollResponder\\"]; + +getScrollableNode: ScrollView[\\"getScrollableNode\\"]; + +getInnerViewNode: ScrollView[\\"getInnerViewNode\\"]; + +getInnerViewRef: ScrollView[\\"getInnerViewRef\\"]; + +getNativeScrollRef: ScrollView[\\"getNativeScrollRef\\"]; + +scrollTo: ScrollView[\\"scrollTo\\"]; + +scrollToEnd: ScrollView[\\"scrollToEnd\\"]; + +flashScrollIndicators: ScrollView[\\"flashScrollIndicators\\"]; + +scrollResponderZoomTo: ScrollView[\\"scrollResponderZoomTo\\"]; + +scrollResponderScrollNativeHandleToKeyboard: ScrollView[\\"scrollResponderScrollNativeHandleToKeyboard\\"]; } export type DecelerationRateType = \\"fast\\" | \\"normal\\" | number; export type ScrollResponderType = ScrollViewImperativeMethods; @@ -4426,12 +4423,12 @@ declare export default class NativeEventEmitter< constructor(nativeModule: ?NativeModule): void; addListener>( eventType: TEvent, - listener: (...args: $ElementType) => mixed, + listener: (...args: TEventToArgsMap[TEvent]) => mixed, context?: mixed ): EventSubscription; emit>( eventType: TEvent, - ...args: $ElementType + ...args: TEventToArgsMap[TEvent] ): void; removeAllListeners>(eventType?: ?TEvent): void; listenerCount>(eventType: TEvent): number; @@ -5208,7 +5205,7 @@ declare class LinkingImpl extends NativeEventEmitter { constructor(): void; addEventListener>( eventType: K, - listener: (...$ElementType) => mixed + listener: (...LinkingEventDefinitions[K]) => mixed ): EventSubscription; openURL(url: string): Promise; canOpenURL(url: string): Promise; @@ -5282,17 +5279,14 @@ type FlatListBaseProps = { }; type VirtualizedListProps = React.ElementConfig; export type FlatListProps = { - ...$Diff< + ...Omit< VirtualizedListProps, - { - data: $PropertyType, - getItem: $PropertyType, - getItemCount: $PropertyType, - getItemLayout: $PropertyType, - renderItem: $PropertyType, - keyExtractor: $PropertyType, - ... - }, + | \\"data\\" + | \\"getItem\\" + | \\"getItemCount\\" + | \\"getItemLayout\\" + | \\"renderItem\\" + | \\"keyExtractor\\", >, ...FlatListBaseProps, ... @@ -5366,27 +5360,9 @@ type OptionalProps = { removeClippedSubviews?: boolean, }; export type SectionListProps = { - ...$Diff< + ...Omit< VirtualizedSectionListProps, - { - getItem: $PropertyType< - VirtualizedSectionListProps, - \\"getItem\\", - >, - getItemCount: $PropertyType< - VirtualizedSectionListProps, - \\"getItemCount\\", - >, - renderItem: $PropertyType< - VirtualizedSectionListProps, - \\"renderItem\\", - >, - keyExtractor: $PropertyType< - VirtualizedSectionListProps, - \\"keyExtractor\\", - >, - ... - }, + \\"getItem\\" | \\"getItemCount\\" | \\"renderItem\\" | \\"keyExtractor\\", >, ...RequiredProps, ...OptionalProps, @@ -5438,27 +5414,9 @@ type OptionalProps = { removeClippedSubviews?: boolean, }; export type Props = $ReadOnly<{ - ...$Diff< + ...Omit< VirtualizedSectionListProps, - { - getItem: $PropertyType< - VirtualizedSectionListProps, - \\"getItem\\", - >, - getItemCount: $PropertyType< - VirtualizedSectionListProps, - \\"getItemCount\\", - >, - renderItem: $PropertyType< - VirtualizedSectionListProps, - \\"renderItem\\", - >, - keyExtractor: $PropertyType< - VirtualizedSectionListProps, - \\"keyExtractor\\", - >, - ... - }, + \\"getItem\\" | \\"getItemCount\\" | \\"renderItem\\" | \\"keyExtractor\\", >, ...RequiredProps, ...OptionalProps, @@ -6242,7 +6200,7 @@ exports[`public API should not change unintentionally Libraries/Network/RCTNetwo "declare const RCTNetworking: interface { addListener>( eventType: K, - listener: (...$ElementType) => mixed, + listener: (...RCTNetworkingEventDefinitions[K]) => mixed, context?: mixed ): EventSubscription, sendRequest( @@ -7435,7 +7393,7 @@ export type DangerouslyImpreciseStyleProp = ____DangerouslyImpreciseStyleProp_Internal; export type TypeForStyleKey< +key: $Keys<____DangerouslyImpreciseStyle_Internal>, -> = $ElementType<____DangerouslyImpreciseStyle_Internal, key>; +> = ____DangerouslyImpreciseStyle_Internal[key]; export type ViewStyle = ____ViewStyle_Internal; export type TextStyle = ____TextStyle_Internal; export type ImageStyle = ____ImageStyle_Internal; @@ -7467,7 +7425,7 @@ export type DangerouslyImpreciseStyleProp = ____DangerouslyImpreciseStyleProp_Internal; export type TypeForStyleKey< +key: $Keys<____DangerouslyImpreciseStyle_Internal>, -> = $ElementType<____DangerouslyImpreciseStyle_Internal, key>; +> = ____DangerouslyImpreciseStyle_Internal[key]; export type ViewStyle = ____ViewStyle_Internal; export type TextStyle = ____TextStyle_Internal; export type ImageStyle = ____ImageStyle_Internal; @@ -8894,7 +8852,7 @@ declare export default typeof RCTLog; `; exports[`public API should not change unintentionally Libraries/Utilities/ReactNativeTestTools.js 1`] = ` -"export type ReactTestInstance = $PropertyType; +"export type ReactTestInstance = ReactTestRendererType[\\"root\\"]; export type Predicate = (node: ReactTestInstance) => boolean; export type ReactTestRendererJSON = ReturnType; declare function byClickable(): Predicate; diff --git a/packages/rn-tester/js/components/RNTPressableRow.js b/packages/rn-tester/js/components/RNTPressableRow.js index 7892eabf81c..9d6f2863757 100644 --- a/packages/rn-tester/js/components/RNTPressableRow.js +++ b/packages/rn-tester/js/components/RNTPressableRow.js @@ -13,7 +13,7 @@ import {RNTesterThemeContext} from './RNTesterTheme'; import * as React from 'react'; import {Pressable, StyleSheet, Text, View} from 'react-native'; -type ViewStyleProp = $ElementType, 'style'>; +type ViewStyleProp = React.ElementConfig['style']; type Props = { accessibilityLabel?: ?string, testID?: ?string, diff --git a/packages/rn-tester/js/examples/Animated/utils/ToggleNativeDriver.js b/packages/rn-tester/js/examples/Animated/utils/ToggleNativeDriver.js index e3d482cb45b..29e7068ad06 100644 --- a/packages/rn-tester/js/examples/Animated/utils/ToggleNativeDriver.js +++ b/packages/rn-tester/js/examples/Animated/utils/ToggleNativeDriver.js @@ -12,14 +12,11 @@ import {RNTesterThemeContext} from '../../../components/RNTesterTheme'; import * as React from 'react'; import {StyleSheet, Switch, Text, View} from 'react-native'; -type ViewStyleProp = $ElementType, 'style'>; +type ViewStyleProp = React.ElementConfig['style']; type Props = { value: boolean, - onValueChange: $ElementType< - React.ElementConfig, - 'onValueChange', - >, + onValueChange: React.ElementConfig['onValueChange'], style?: ?ViewStyleProp, }; diff --git a/packages/rn-tester/js/examples/FlatList/FlatList-BaseOnViewableItemsChanged.js b/packages/rn-tester/js/examples/FlatList/FlatList-BaseOnViewableItemsChanged.js index 5e50bfa5ffb..af5110eea2d 100644 --- a/packages/rn-tester/js/examples/FlatList/FlatList-BaseOnViewableItemsChanged.js +++ b/packages/rn-tester/js/examples/FlatList/FlatList-BaseOnViewableItemsChanged.js @@ -17,7 +17,7 @@ import * as React from 'react'; import {FlatList, StyleSheet, View} from 'react-native'; type FlatListProps = React.ElementProps; -type ViewabilityConfig = $PropertyType; +type ViewabilityConfig = FlatListProps['viewabilityConfig']; const BASE_VIEWABILITY_CONFIG = { minimumViewTime: 1000, diff --git a/packages/rn-tester/js/examples/SectionList/SectionList-BaseOnViewableItemsChanged.js b/packages/rn-tester/js/examples/SectionList/SectionList-BaseOnViewableItemsChanged.js index 82675e04b68..748cf11529c 100644 --- a/packages/rn-tester/js/examples/SectionList/SectionList-BaseOnViewableItemsChanged.js +++ b/packages/rn-tester/js/examples/SectionList/SectionList-BaseOnViewableItemsChanged.js @@ -15,7 +15,7 @@ import * as React from 'react'; import {SectionList, StyleSheet, View} from 'react-native'; type SectionListProps = React.ElementProps; -type ViewabilityConfig = $PropertyType; +type ViewabilityConfig = SectionListProps['viewabilityConfig']; const BASE_VIEWABILITY_CONFIG = { minimumViewTime: 1000, diff --git a/packages/virtualized-lists/Lists/VirtualizedSectionList.js b/packages/virtualized-lists/Lists/VirtualizedSectionList.js index f5d8333e472..e4e7fbd31ab 100644 --- a/packages/virtualized-lists/Lists/VirtualizedSectionList.js +++ b/packages/virtualized-lists/Lists/VirtualizedSectionList.js @@ -102,14 +102,7 @@ type VirtualizedListProps = React.ElementConfig; export type VirtualizedSectionListProps = { ...RequiredProps, ...OptionalProps, - ...$Diff< - VirtualizedListProps, - { - renderItem: $PropertyType, - data: $PropertyType, - ... - }, - >, + ...Omit, }; export type ScrollToLocationParamsType = { animated?: ?boolean,