diff --git a/flow-typed/environment/node.js b/flow-typed/environment/node.js index 6f9d2a0cb802..c2f5626e3be4 100644 --- a/flow-typed/environment/node.js +++ b/flow-typed/environment/node.js @@ -618,7 +618,7 @@ declare class crypto$Hash extends stream$Duplex { data: string | Buffer, input_encoding?: 'utf8' | 'ascii' | 'latin1' | 'binary', ): crypto$Hash; - copy(options?: mixed): crypto$Hash; + copy(options?: unknown): crypto$Hash; } declare class crypto$Hmac extends stream$Duplex { @@ -703,7 +703,7 @@ declare class crypto$KeyObject { format: 'der', }>, ): Buffer; - export(options: Readonly<{format: 'jwk'}>): mixed; + export(options: Readonly<{format: 'jwk'}>): unknown; equals(otherKeyObject: crypto$KeyObject): boolean; } @@ -739,7 +739,7 @@ declare class crypto$X509Certificate { checkIssued(otherCert: crypto$X509Certificate): boolean; checkPrivateKey(privateKey: crypto$KeyObject): boolean; toJSON(): string; - toLegacyObject(): mixed; + toLegacyObject(): unknown; toString(): string; verify(publicKey: crypto$KeyObject): boolean; } @@ -930,10 +930,10 @@ declare module 'crypto' { encoding: buffer$Encoding, ): crypto$KeyObject; declare function createPublicKey( - key: string | Buffer | crypto$KeyObject | mixed, + key: string | Buffer | crypto$KeyObject | unknown, ): crypto$KeyObject; declare function createPrivateKey( - key: string | Buffer | mixed, + key: string | Buffer | unknown, ): crypto$KeyObject; declare function generateKeyPair( type: @@ -945,7 +945,7 @@ declare module 'crypto' { | 'ed448' | 'x25519' | 'x448', - options: mixed, + options: unknown, callback: ( err: ?Error, publicKey: crypto$KeyObject, @@ -962,7 +962,7 @@ declare module 'crypto' { | 'ed448' | 'x25519' | 'x448', - options: mixed, + options: unknown, ): {publicKey: crypto$KeyObject, privateKey: crypto$KeyObject, ...}; declare function generateKey( type: 'hmac' | 'aes', @@ -2011,8 +2011,8 @@ declare module 'fs' { | Buffer | Uint8Array | DataView - | AsyncIterable - | Iterable + | AsyncIterable + | Iterable | stream$Readable, options: WriteOptions | string, ) => Promise; @@ -2908,17 +2908,19 @@ declare module 'perf_hooks' { +entryType: EntryType; +name: string; +startTime: number; - +detail?: mixed; - toJSON(): mixed; + +detail?: unknown; + toJSON(): unknown; } - declare export class PerformanceMark extends PerformanceEntry { + declare export class PerformanceMark extends PerformanceEntry { +entryType: 'mark'; +duration: 0; +detail?: T; } - declare export class PerformanceMeasure extends PerformanceEntry { + declare export class PerformanceMeasure + extends PerformanceEntry + { +entryType: 'measure'; +detail?: T; } @@ -2987,12 +2989,12 @@ declare module 'perf_hooks' { +active: number, }; - declare export type PerformanceMarkOptions = Readonly<{ + declare export type PerformanceMarkOptions = Readonly<{ detail?: T, startTime?: number, }>; - declare export type PerformanceMeasureOptions = Readonly<{ + declare export type PerformanceMeasureOptions = Readonly<{ detail?: T, duration?: number, end?: number | string, @@ -3023,11 +3025,11 @@ declare module 'perf_hooks' { now(): number; setResourceTimingBufferSize(maxSize: number): void; +timeOrigin: number; - timerify, TReturn>( + timerify, TReturn>( fn: (...TArgs) => TReturn, options?: Readonly<{histogram?: RecordableHistogram}>, ): (...TArgs) => TReturn; - toJSON(): mixed; + toJSON(): unknown; } declare export var performance: Performance; @@ -3720,20 +3722,20 @@ declare module 'timers' { // [key: $SymbolDispose]: () => void; } - declare export function setTimeout>( - callback: (...args: TArgs) => mixed, + declare export function setTimeout>( + callback: (...args: TArgs) => unknown, delay?: number, ...args: TArgs ): Timeout; - declare export function setInterval>( - callback: (...args: TArgs) => mixed, + declare export function setInterval>( + callback: (...args: TArgs) => unknown, delay?: number, ...args: TArgs ): Timeout; - declare export function setImmediate>( - callback: (...args: TArgs) => mixed, + declare export function setImmediate>( + callback: (...args: TArgs) => unknown, ...args: TArgs ): Immediate; diff --git a/flow-typed/npm/babel-traverse_v7.x.x.js b/flow-typed/npm/babel-traverse_v7.x.x.js index 0726aef6da8d..bbebfb8332bd 100644 --- a/flow-typed/npm/babel-traverse_v7.x.x.js +++ b/flow-typed/npm/babel-traverse_v7.x.x.js @@ -556,24 +556,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 @@ -724,7 +724,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 6bc8eb1d3f29..a8c085b8a548 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 ad29acf8668f..6bdab2cd891e 100644 --- a/packages/dev-middleware/src/inspector-proxy/Device.js +++ b/packages/dev-middleware/src/inspector-proxy/Device.js @@ -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 b06c447b3b37..e2c0e2d3fa6d 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 d8fcb31bd636..4668a7ece376 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 7c018733ff7e..b1456ec048e2 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 9e1d236c9288..223f6149ddbc 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 a17be856521c..b5e1e3a37b1f 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 7d51999f5e6c..447327cb6695 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 396ed4047e28..5df3131bdcf0 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 9e798c90d95f..86c356f95d3c 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 8ec5f61eb8c3..e8e00e49d087 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 e978329bd381..bf137ac0ed6e 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 1e90ee273908..3af2375e2bbc 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 9b155775fc1e..78b68da1ee35 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 454ce4b9176e..ec4720f9f46e 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 22e3aca18de6..dcafeb05bc44 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 26e1dacfb47c..ddc0389e0b7d 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 f9e439a84cd9..5874de821cf1 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 3bbfa9031f30..23dedbe8552f 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 73ebfd9bfb0a..f72489b8815e 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 ec6b7586d01e..b152e41164ba 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 74baa27ff1de..767f5461f290 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 c4ce2aa9d4d5..f3a829738373 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 05d668dee422..7fc5515aaaf6 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 dab58d04617a..a85f804aa39d 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 ec3877292ec2..62933747b3d5 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 0d6c2cd17023..dcc7e6cc5a86 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 a952455b82fc..df7080288e8d 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 3e04fd9c7354..65eee4b243d0 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 99b827e95d90..a27b6363ada7 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);