diff --git a/flow-typed/npm/babel-traverse_v7.x.x.js b/flow-typed/npm/babel-traverse_v7.x.x.js index 344099df669978..1aec5cebd61877 100644 --- a/flow-typed/npm/babel-traverse_v7.x.x.js +++ b/flow-typed/npm/babel-traverse_v7.x.x.js @@ -558,24 +558,24 @@ declare module '@babel/traverse' { * Check whether we have the input `key`. If the `key` references an array then we check * if the array has any items, otherwise we just check if it's falsy. */ - has(key: $Keys): boolean; + has(key: keyof TNode): boolean; isStatic(): boolean; /** * Alias of `has`. */ - is(key: $Keys): boolean; + is(key: keyof TNode): boolean; /** * Opposite of `has`. */ - isnt(key: $Keys): boolean; + isnt(key: keyof TNode): boolean; /** * Check whether the path node `key` strict equals `value`. */ - equals(key: $Keys, value: any): boolean; + equals(key: keyof TNode, value: any): boolean; /** * Check the type against our stored internal type of the node. This is handy when a node has @@ -726,7 +726,7 @@ declare module '@babel/traverse' { getAllPrevSiblings(): Array>; - get>( + get( key: TKey, context?: boolean | TraversalContext, ): TNode[TKey] extends BabelNode ? NodePath<> : Array>; diff --git a/flow-typed/npm/rxjs_v6.x.x.js b/flow-typed/npm/rxjs_v6.x.x.js index 6bc8eb1d3f2938..a8c085b8a548b8 100644 --- a/flow-typed/npm/rxjs_v6.x.x.js +++ b/flow-typed/npm/rxjs_v6.x.x.js @@ -2193,10 +2193,10 @@ declare module 'rxjs/operators' { ): rxjs$MonoTypeOperatorFunction; declare export function distinctUntilKeyChanged( - key: $Keys, + key: keyof T, ): rxjs$MonoTypeOperatorFunction; - declare export function distinctUntilKeyChanged>( + declare export function distinctUntilKeyChanged( key: K, compare: (x: unknown, y: unknown) => boolean, ): rxjs$MonoTypeOperatorFunction; diff --git a/packages/dev-middleware/src/inspector-proxy/Device.js b/packages/dev-middleware/src/inspector-proxy/Device.js index 2f0d2802ebc2ba..e64d7eaf8f5a65 100644 --- a/packages/dev-middleware/src/inspector-proxy/Device.js +++ b/packages/dev-middleware/src/inspector-proxy/Device.js @@ -96,7 +96,7 @@ export default class Device { #deviceSocket: WS; // Stores the most recent listing of device's pages, keyed by the `id` field. - #pages: $ReadOnlyMap = new Map(); + #pages: ReadonlyMap = new Map(); // Stores information about currently connected debugger (if any). #debuggerConnection: ?DebuggerConnection = null; @@ -480,7 +480,7 @@ export default class Device { /** * Returns `true` if a page supports the given target capability flag. */ - #pageHasCapability(page: Page, flag: $Keys): boolean { + #pageHasCapability(page: Page, flag: keyof TargetCapabilityFlags): boolean { return page.capabilities[flag] === true; } diff --git a/packages/dev-middleware/src/inspector-proxy/cdp-types/messages.js b/packages/dev-middleware/src/inspector-proxy/cdp-types/messages.js index b06c447b3b375c..e2c0e2d3fa6dd0 100644 --- a/packages/dev-middleware/src/inspector-proxy/cdp-types/messages.js +++ b/packages/dev-middleware/src/inspector-proxy/cdp-types/messages.js @@ -12,18 +12,18 @@ import type {JSONSerializable} from '../types'; import type {Commands, Events} from './protocol'; // Note: A CDP event is a JSON-RPC notification with no `id` member. -export type CDPEvent = 'unknown'> = { +export type CDPEvent = { method: TEvent, params: Events[TEvent], }; -export type CDPRequest = 'unknown'> = { +export type CDPRequest = { method: TCommand, params: Commands[TCommand]['paramsType'], id: number, }; -export type CDPResponse = 'unknown'> = +export type CDPResponse = | { result: Commands[TCommand]['resultType'], id: number, diff --git a/packages/react-native/Libraries/Animated/createAnimatedComponent.js b/packages/react-native/Libraries/Animated/createAnimatedComponent.js index 470e745d5afa2a..c56c3e11271aac 100644 --- a/packages/react-native/Libraries/Animated/createAnimatedComponent.js +++ b/packages/react-native/Libraries/Animated/createAnimatedComponent.js @@ -65,9 +65,9 @@ type PassThroughProps = Readonly<{ passthroughAnimatedPropExplicitValues?: ViewProps | null, }>; -type LooseOmit> = Pick< +type LooseOmit = Pick< O, - Exclude<$Keys, K>, + Exclude, >; export type AnimatedProps = LooseOmit< diff --git a/packages/react-native/Libraries/AppState/AppState.js b/packages/react-native/Libraries/AppState/AppState.js index 7c018733ff7e6c..b1456ec048e2f6 100644 --- a/packages/react-native/Libraries/AppState/AppState.js +++ b/packages/react-native/Libraries/AppState/AppState.js @@ -42,7 +42,7 @@ type AppStateEventDefinitions = { focus: [], }; -export type AppStateEvent = $Keys; +export type AppStateEvent = keyof AppStateEventDefinitions; type NativeAppStateEventDefinitions = { appStateDidChange: [{app_state: AppStateStatus}], diff --git a/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js b/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js index 9e1d236c92883c..223f6149ddbc07 100644 --- a/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +++ b/packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js @@ -49,30 +49,28 @@ type AccessibilityEventTypes = | 'windowStateChange'; // Mapping of public event names to platform-specific event names. -const EventNames: Map< - $Keys, - string, -> = Platform.OS === 'android' - ? new Map([ - ['change', 'touchExplorationDidChange'], - ['reduceMotionChanged', 'reduceMotionDidChange'], - ['highTextContrastChanged', 'highTextContrastDidChange'], - ['screenReaderChanged', 'touchExplorationDidChange'], - ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], - ['invertColorsChanged', 'invertColorDidChange'], - ['grayscaleChanged', 'grayscaleModeDidChange'], - ]) - : new Map([ - ['announcementFinished', 'announcementFinished'], - ['boldTextChanged', 'boldTextChanged'], - ['change', 'screenReaderChanged'], - ['grayscaleChanged', 'grayscaleChanged'], - ['invertColorsChanged', 'invertColorsChanged'], - ['reduceMotionChanged', 'reduceMotionChanged'], - ['reduceTransparencyChanged', 'reduceTransparencyChanged'], - ['screenReaderChanged', 'screenReaderChanged'], - ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], - ]); +const EventNames: Map = + Platform.OS === 'android' + ? new Map([ + ['change', 'touchExplorationDidChange'], + ['reduceMotionChanged', 'reduceMotionDidChange'], + ['highTextContrastChanged', 'highTextContrastDidChange'], + ['screenReaderChanged', 'touchExplorationDidChange'], + ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], + ['invertColorsChanged', 'invertColorDidChange'], + ['grayscaleChanged', 'grayscaleModeDidChange'], + ]) + : new Map([ + ['announcementFinished', 'announcementFinished'], + ['boldTextChanged', 'boldTextChanged'], + ['change', 'screenReaderChanged'], + ['grayscaleChanged', 'grayscaleChanged'], + ['invertColorsChanged', 'invertColorsChanged'], + ['reduceMotionChanged', 'reduceMotionChanged'], + ['reduceTransparencyChanged', 'reduceTransparencyChanged'], + ['screenReaderChanged', 'screenReaderChanged'], + ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], + ]); /** * Sometimes it's useful to know whether or not the device has a screen reader @@ -426,7 +424,7 @@ const AccessibilityInfo = { * * See https://reactnative.dev/docs/accessibilityinfo#addeventlistener */ - addEventListener>( + addEventListener( eventName: K, // $FlowFixMe[incompatible-type] - Flow bug with unions and generics (T128099423) handler: (...AccessibilityEventDefinitions[K]) => void, diff --git a/packages/react-native/Libraries/Components/Keyboard/Keyboard.js b/packages/react-native/Libraries/Components/Keyboard/Keyboard.js index a17be856521c70..b5e1e3a37b1fc6 100644 --- a/packages/react-native/Libraries/Components/Keyboard/Keyboard.js +++ b/packages/react-native/Libraries/Components/Keyboard/Keyboard.js @@ -16,7 +16,7 @@ import dismissKeyboard from '../../Utilities/dismissKeyboard'; import Platform from '../../Utilities/Platform'; import NativeKeyboardObserver from './NativeKeyboardObserver'; -export type KeyboardEventName = $Keys; +export type KeyboardEventName = keyof KeyboardEventDefinitions; export type KeyboardEventEasing = | 'easeIn' @@ -146,7 +146,7 @@ class KeyboardImpl { * * @param {function} callback function to be called when the event fires. */ - addListener>( + addListener( eventType: K, listener: (...KeyboardEventDefinitions[K]) => unknown, context?: unknown, @@ -159,7 +159,7 @@ class KeyboardImpl { * * @param {string} eventType The native event string listeners are watching which will be removed. */ - removeAllListeners>(eventType: ?K): void { + removeAllListeners(eventType: ?K): void { this._emitter.removeAllListeners(eventType); } diff --git a/packages/react-native/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js b/packages/react-native/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js index 7d51999f5e6c9a..447327cb6695be 100644 --- a/packages/react-native/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +++ b/packages/react-native/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js @@ -21,7 +21,7 @@ export type {ProgressBarAndroidProps}; // of ProgressBarAndroidProps. TS's Omit does not distribute over unions, so // we define our own version which does. This does not affect Flow. // $FlowExpectedError[unclear-type] -type Omit = T extends any ? Pick, K>> : T; +type Omit = T extends any ? Pick> : T; /** * ProgressBarAndroid has been extracted from react-native core and will be removed in a future release. diff --git a/packages/react-native/Libraries/Components/StatusBar/StatusBar.js b/packages/react-native/Libraries/Components/StatusBar/StatusBar.js index 396ed4047e28e8..5df3131bdcf069 100644 --- a/packages/react-native/Libraries/Components/StatusBar/StatusBar.js +++ b/packages/react-native/Libraries/Components/StatusBar/StatusBar.js @@ -20,7 +20,7 @@ import * as React from 'react'; /** * Status bar style */ -export type StatusBarStyle = $Keys<{ +export type StatusBarStyle = keyof { /** * Default status bar style (dark for iOS, light for Android) */ @@ -34,12 +34,12 @@ export type StatusBarStyle = $Keys<{ */ 'dark-content': string, ... -}>; +}; /** * Status bar animation */ -export type StatusBarAnimation = $Keys<{ +export type StatusBarAnimation = keyof { /** * No animation */ @@ -53,7 +53,7 @@ export type StatusBarAnimation = $Keys<{ */ slide: string, ... -}>; +}; export type StatusBarPropsAndroid = Readonly<{ /** diff --git a/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js b/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js index 5a996da4f319b4..a00b1983c6fc74 100644 --- a/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js +++ b/packages/react-native/Libraries/EventEmitter/NativeEventEmitter.js @@ -83,7 +83,7 @@ export default class NativeEventEmitter< } } - addListener>( + addListener( eventType: TEvent, listener: (...args: TEventToArgsMap[TEvent]) => unknown, context?: unknown, @@ -107,7 +107,7 @@ export default class NativeEventEmitter< }; } - emit>( + emit( eventType: TEvent, ...args: TEventToArgsMap[TEvent] ): void { @@ -116,9 +116,7 @@ export default class NativeEventEmitter< RCTDeviceEventEmitter.emit(eventType, ...args); } - removeAllListeners>( - eventType?: ?TEvent, - ): void { + removeAllListeners(eventType?: ?TEvent): void { invariant( eventType != null, '`NativeEventEmitter.removeAllListener()` requires a non-null argument.', @@ -127,7 +125,7 @@ export default class NativeEventEmitter< RCTDeviceEventEmitter.removeAllListeners(eventType); } - listenerCount>(eventType: TEvent): number { + listenerCount(eventType: TEvent): number { return RCTDeviceEventEmitter.listenerCount(eventType); } } diff --git a/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js b/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js index 8ec5f61eb8c378..e8e00e49d08750 100644 --- a/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js +++ b/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js @@ -25,7 +25,7 @@ type RCTDeviceEventDefinitions = {[name: string]: Array}; */ class RCTDeviceEventEmitterImpl extends EventEmitter { // Add systrace to RCTDeviceEventEmitter.emit method for debugging - emit>( + emit( eventType: TEvent, ...args: RCTDeviceEventDefinitions[TEvent] ): void { diff --git a/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js b/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js index 9bfe9ee44e7664..81d0c23c2eff5e 100644 --- a/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +++ b/packages/react-native/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js @@ -22,7 +22,7 @@ export default class NativeEventEmitter< TEventToArgsMap: Readonly>>, > implements IEventEmitter { - addListener>( + addListener( eventType: TEvent, listener: (...args: TEventToArgsMap[TEvent]) => unknown, context?: unknown, @@ -30,20 +30,18 @@ export default class NativeEventEmitter< return RCTDeviceEventEmitter.addListener(eventType, listener, context); } - emit>( + emit( eventType: TEvent, ...args: TEventToArgsMap[TEvent] ): void { RCTDeviceEventEmitter.emit(eventType, ...args); } - removeAllListeners>( - eventType?: ?TEvent, - ): void { + removeAllListeners(eventType?: ?TEvent): void { RCTDeviceEventEmitter.removeAllListeners(eventType); } - listenerCount>(eventType: TEvent): number { + listenerCount(eventType: TEvent): number { return RCTDeviceEventEmitter.listenerCount(eventType); } } diff --git a/packages/react-native/Libraries/Linking/Linking.js b/packages/react-native/Libraries/Linking/Linking.js index 1e90ee2739080b..3af2375e2bbc9c 100644 --- a/packages/react-native/Libraries/Linking/Linking.js +++ b/packages/react-native/Libraries/Linking/Linking.js @@ -32,7 +32,7 @@ class LinkingImpl extends NativeEventEmitter { * * See https://reactnative.dev/docs/linking#addeventlistener */ - addEventListener>( + addEventListener( eventType: K, listener: (...LinkingEventDefinitions[K]) => unknown, ): EventSubscription { diff --git a/packages/react-native/Libraries/Network/RCTNetworking.android.js b/packages/react-native/Libraries/Network/RCTNetworking.android.js index 9b155775fc1e45..78b68da1ee355c 100644 --- a/packages/react-native/Libraries/Network/RCTNetworking.android.js +++ b/packages/react-native/Libraries/Network/RCTNetworking.android.js @@ -48,7 +48,7 @@ const emitter = new NativeEventEmitter<$FlowFixMe>( * requestId to each network request that can be used to abort that request later on. */ const RCTNetworking = { - addListener>( + addListener( eventType: K, listener: (...RCTNetworkingEventDefinitions[K]) => unknown, context?: unknown, diff --git a/packages/react-native/Libraries/Network/RCTNetworking.ios.js b/packages/react-native/Libraries/Network/RCTNetworking.ios.js index 454ce4b9176ea6..ec4720f9f46ec5 100644 --- a/packages/react-native/Libraries/Network/RCTNetworking.ios.js +++ b/packages/react-native/Libraries/Network/RCTNetworking.ios.js @@ -18,7 +18,7 @@ import {type RCTNetworkingEventDefinitions} from './RCTNetworkingEventDefinition import {type NativeResponseType} from './XMLHttpRequest'; const RCTNetworking = { - addListener>( + addListener( eventType: K, listener: (...RCTNetworkingEventDefinitions[K]) => unknown, context?: unknown, diff --git a/packages/react-native/Libraries/Network/RCTNetworking.js.flow b/packages/react-native/Libraries/Network/RCTNetworking.js.flow index 22e3aca18de668..dcafeb05bc4497 100644 --- a/packages/react-native/Libraries/Network/RCTNetworking.js.flow +++ b/packages/react-native/Libraries/Network/RCTNetworking.js.flow @@ -16,7 +16,7 @@ import type {RCTNetworkingEventDefinitions} from './RCTNetworkingEventDefinition import type {NativeResponseType} from './XMLHttpRequest'; declare const RCTNetworking: interface { - addListener>( + addListener( eventType: K, // $FlowFixMe[invalid-computed-prop] listener: (...RCTNetworkingEventDefinitions[K]) => unknown, diff --git a/packages/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.js b/packages/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.js index 26e1dacfb47c28..ddc0389e0b7db3 100644 --- a/packages/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.js +++ b/packages/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.js @@ -89,7 +89,7 @@ export type FetchResult = { /** * An event emitted by PushNotificationIOS. */ -export type PushNotificationEventName = $Keys<{ +export type PushNotificationEventName = keyof { /** * Fired when a remote notification is received. The handler will be invoked * with an instance of `PushNotificationIOS`. This will handle notifications @@ -116,7 +116,7 @@ export type PushNotificationEventName = $Keys<{ */ registrationError: string, ... -}>; +}; export interface PushNotification { /** diff --git a/packages/react-native/Libraries/ReactNative/RendererImplementation.js b/packages/react-native/Libraries/ReactNative/RendererImplementation.js index f9e439a84cd964..5874de821cf131 100644 --- a/packages/react-native/Libraries/ReactNative/RendererImplementation.js +++ b/packages/react-native/Libraries/ReactNative/RendererImplementation.js @@ -37,11 +37,11 @@ function getPaperRenderer(): ReactNativeType { return cachedPaperRenderer; } -const getMethod: (>( +const getMethod: (( () => ReactFabricType, MethodName, ) => ReactFabricType[MethodName]) & - (>( + (( () => ReactNativeType, MethodName, ) => ReactNativeType[MethodName]) = (getRenderer, methodName) => { @@ -59,13 +59,13 @@ const getMethod: (>( }; }; -function getFabricMethod>( +function getFabricMethod( methodName: MethodName, ): ReactFabricType[MethodName] { return getMethod(getFabricRenderer, methodName); } -function getPaperMethod>( +function getPaperMethod( methodName: MethodName, ): ReactNativeType[MethodName] { return getMethod(getPaperRenderer, methodName); diff --git a/packages/react-native/Libraries/StyleSheet/StyleSheet.js b/packages/react-native/Libraries/StyleSheet/StyleSheet.js index 3bbfa9031f30be..23dedbe8552f72 100644 --- a/packages/react-native/Libraries/StyleSheet/StyleSheet.js +++ b/packages/react-native/Libraries/StyleSheet/StyleSheet.js @@ -118,7 +118,7 @@ export type DangerouslyImpreciseStyleProp = * This will correctly give you the type 'absolute' | 'relative' */ export type TypeForStyleKey< - +key: $Keys<____DangerouslyImpreciseStyle_Internal>, + +key: keyof ____DangerouslyImpreciseStyle_Internal, > = ____DangerouslyImpreciseStyle_Internal[key]; /** diff --git a/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow b/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow index 73ebfd9bfb0a24..f72489b8815e77 100644 --- a/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow +++ b/packages/react-native/Libraries/StyleSheet/StyleSheet.js.flow @@ -119,7 +119,7 @@ export type DangerouslyImpreciseStyleProp = * This will correctly give you the type 'absolute' | 'relative' */ export type TypeForStyleKey< - +key: $Keys<____DangerouslyImpreciseStyle_Internal>, + +key: keyof ____DangerouslyImpreciseStyle_Internal, > = ____DangerouslyImpreciseStyle_Internal[key]; /** diff --git a/packages/react-native/Libraries/StyleSheet/private/_TransformStyle.js b/packages/react-native/Libraries/StyleSheet/private/_TransformStyle.js index 0152590ada7ff5..315a434cea4991 100644 --- a/packages/react-native/Libraries/StyleSheet/private/_TransformStyle.js +++ b/packages/react-native/Libraries/StyleSheet/private/_TransformStyle.js @@ -13,10 +13,10 @@ import type AnimatedNode from '../../Animated/nodes/AnimatedNode'; // Helper types to enforce that a single key is used in a transform object // after generating a TypeScript definition file from the Flow types. // $FlowExpectedError[unclear-type] -type KeysOfUnion = T extends any ? $Keys : empty; +type KeysOfUnion = T extends any ? keyof T : empty; // $FlowExpectedError[unclear-type] type ValueOfUnion = T extends any - ? K extends $Keys + ? K extends keyof T ? T[K] : empty : empty; diff --git a/packages/react-native/Libraries/Types/ReactDevToolsTypes.js b/packages/react-native/Libraries/Types/ReactDevToolsTypes.js index 74baa27ff1debd..767f5461f290c0 100644 --- a/packages/react-native/Libraries/Types/ReactDevToolsTypes.js +++ b/packages/react-native/Libraries/Types/ReactDevToolsTypes.js @@ -34,12 +34,12 @@ export type ReactDevToolsAgentEvents = { export type ReactDevToolsAgent = { selectNode(node: unknown): void, stopInspectingNative(value: boolean): void, - addListener>( + addListener( event: Event, listener: (...ReactDevToolsAgentEvents[Event]) => void, ): void, removeListener( - event: $Keys, + event: keyof ReactDevToolsAgentEvents, listener: () => void, ): void, }; diff --git a/packages/react-native/Libraries/Utilities/codegenNativeCommands.js b/packages/react-native/Libraries/Utilities/codegenNativeCommands.js index 17c271f1191e02..36c82a614be6be 100644 --- a/packages/react-native/Libraries/Utilities/codegenNativeCommands.js +++ b/packages/react-native/Libraries/Utilities/codegenNativeCommands.js @@ -15,9 +15,9 @@ type NativeCommandsOptions = Readonly<{ }>; function codegenNativeCommands( - options: NativeCommandsOptions<$Keys>, + options: NativeCommandsOptions, ): T { - const commandObj: {[$Keys]: (...$ReadOnlyArray) => void} = {}; + const commandObj: {[keyof T]: (...$ReadOnlyArray) => void} = {}; options.supportedCommands.forEach(command => { // $FlowFixMe[missing-local-annot] diff --git a/packages/react-native/Libraries/vendor/emitter/EventEmitter.js b/packages/react-native/Libraries/vendor/emitter/EventEmitter.js index 2ccfeb47b40f0f..19c78f57a745d5 100644 --- a/packages/react-native/Libraries/vendor/emitter/EventEmitter.js +++ b/packages/react-native/Libraries/vendor/emitter/EventEmitter.js @@ -18,20 +18,20 @@ export interface EventSubscription { export interface IEventEmitter< TEventToArgsMap: Readonly>>, > { - addListener>( + addListener( eventType: TEvent, listener: (...args: TEventToArgsMap[TEvent]) => unknown, context?: unknown, ): EventSubscription; - emit>( + emit( eventType: TEvent, ...args: TEventToArgsMap[TEvent] ): void; - removeAllListeners>(eventType?: ?TEvent): void; + removeAllListeners(eventType?: ?TEvent): void; - listenerCount>(eventType: TEvent): number; + listenerCount(eventType: TEvent): number; } interface Registration { @@ -83,7 +83,7 @@ export default class EventEmitter< * Registers a listener that is called when the supplied event is emitted. * Returns a subscription that has a `remove` method to undo registration. */ - addListener>( + addListener( eventType: TEvent, listener: (...args: TEventToArgsMap[TEvent]) => unknown, context: unknown, @@ -95,7 +95,7 @@ export default class EventEmitter< } const registrations = allocate< TEventToArgsMap, - $Keys, + keyof TEventToArgsMap, TEventToArgsMap[TEvent], >(this.#registry, eventType); const registration: Registration = { @@ -116,7 +116,7 @@ export default class EventEmitter< * If a listener modifies the listeners registered for the same event, those * changes will not be reflected in the current invocation of `emit`. */ - emit>( + emit( eventType: TEvent, ...args: TEventToArgsMap[TEvent] ): void { @@ -135,9 +135,7 @@ export default class EventEmitter< /** * Removes all registered listeners. */ - removeAllListeners>( - eventType?: ?TEvent, - ): void { + removeAllListeners(eventType?: ?TEvent): void { if (eventType == null) { // $FlowFixMe[incompatible-type] this.#registry = {}; @@ -149,7 +147,7 @@ export default class EventEmitter< /** * Returns the number of registered listeners for the supplied event. */ - listenerCount>(eventType: TEvent): number { + listenerCount(eventType: TEvent): number { const registrations: ?Set> = this.#registry[eventType]; return registrations == null ? 0 : registrations.size; @@ -158,7 +156,7 @@ export default class EventEmitter< function allocate< TEventToArgsMap: Readonly>>, - TEvent: $Keys, + TEvent: keyof TEventToArgsMap, TEventArgs: TEventToArgsMap[TEvent], >( registry: Registry, diff --git a/packages/react-native/src/private/__tests__/MemoryBaseline-itest.js b/packages/react-native/src/private/__tests__/MemoryBaseline-itest.js index dab58d04617ad6..a85f804aa39d87 100644 --- a/packages/react-native/src/private/__tests__/MemoryBaseline-itest.js +++ b/packages/react-native/src/private/__tests__/MemoryBaseline-itest.js @@ -38,7 +38,7 @@ const MEMORY_LIMITS_KB = { }, }; -function limitFor(scenario: $Keys): number { +function limitFor(scenario: keyof typeof MEMORY_LIMITS_KB): number { return MEMORY_LIMITS_KB[scenario][__DEV__ ? 'dev' : 'opt']; } diff --git a/packages/react-native/src/private/__tests__/utilities/accessibilityPropsSuite.js b/packages/react-native/src/private/__tests__/utilities/accessibilityPropsSuite.js index e28d6acf2c8bd7..762e3e21fa0e52 100644 --- a/packages/react-native/src/private/__tests__/utilities/accessibilityPropsSuite.js +++ b/packages/react-native/src/private/__tests__/utilities/accessibilityPropsSuite.js @@ -118,7 +118,7 @@ let root: Root; function getAccessibilityProp( content: React.MixedElement, - name: $Keys, + name: keyof AccessibilityProps, ) { Fantom.runTask(() => { root.render(content); @@ -128,7 +128,7 @@ function getAccessibilityProp( function getAccessibilityProps( content: React.MixedElement, - names: $ReadOnlyArray<$Keys>, + names: $ReadOnlyArray, ) { Fantom.runTask(() => { root.render(content); diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlagsBase.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlagsBase.js index 0d6c2cd1702312..dcc7e6cc5a8637 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlagsBase.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlagsBase.js @@ -52,7 +52,7 @@ function createGetter( } export function createJavaScriptFlagGetter< - K: $Keys, + K: keyof ReactNativeFeatureFlagsJsOnly, >( configName: K, defaultValue: ReturnType, @@ -69,7 +69,7 @@ export function createJavaScriptFlagGetter< type NativeFeatureFlags = NonNullable; -export function createNativeFlagGetter>( +export function createNativeFlagGetter( configName: K, defaultValue: ReturnType>, skipUnavailableNativeModuleError: boolean = false, diff --git a/packages/rn-tester/js/utils/RNTesterNavigationReducer.js b/packages/rn-tester/js/utils/RNTesterNavigationReducer.js index a952455b82fcea..df7080288e8d08 100644 --- a/packages/rn-tester/js/utils/RNTesterNavigationReducer.js +++ b/packages/rn-tester/js/utils/RNTesterNavigationReducer.js @@ -55,7 +55,7 @@ const getUpdatedRecentlyUsed = ({ export const RNTesterNavigationReducer = ( state: RNTesterNavigationState, - action: {type: $Keys, data?: any}, + action: {type: keyof typeof RNTesterNavigationActionsType, data?: any}, ): RNTesterNavigationState => { const { data: { diff --git a/packages/virtualized-lists/Lists/StateSafePureComponent.js b/packages/virtualized-lists/Lists/StateSafePureComponent.js index 3e04fd9c73542b..65eee4b243d089 100644 --- a/packages/virtualized-lists/Lists/StateSafePureComponent.js +++ b/packages/virtualized-lists/Lists/StateSafePureComponent.js @@ -32,7 +32,7 @@ export default class StateSafePureComponent< } // $FlowFixMe[incompatible-type] - setState>( + setState( partialState: ?(Pick | ((State, Props) => ?Pick)), callback?: () => unknown, ): void { diff --git a/scripts/build/config.js b/scripts/build/config.js index 99b827e95d9094..a27b6363ada781 100644 --- a/scripts/build/config.js +++ b/scripts/build/config.js @@ -70,7 +70,7 @@ const defaultBuildOptions = { }; function getBuildOptions( - packageName: $Keys, + packageName: keyof BuildConfig['packages'], ): Required { return { ...defaultBuildOptions, @@ -79,7 +79,7 @@ function getBuildOptions( } function getBabelConfig( - packageName: $Keys, + packageName: keyof BuildConfig['packages'], ): BabelCoreOptions { const {target} = getBuildOptions(packageName); @@ -90,7 +90,7 @@ function getBabelConfig( } function getTypeScriptCompilerOptions( - packageName: $Keys, + packageName: keyof BuildConfig['packages'], ): Object { const {target} = getBuildOptions(packageName);