From 3ff01601390b38b3c549960bdaa4167a479a8213 Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Mon, 10 Jul 2023 15:42:46 -0700 Subject: [PATCH] RN: Adopt Indexed Access Types in EventEmitter (#38243) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/38243 Adopts [Indexed Access Types](https://flow.org/en/docs/types/indexed-access/) in `EventEmitter`. Changelog: [Internal] Reviewed By: gkz, SamChou19815 Differential Revision: D47298095 fbshipit-source-id: bc8e2fe1292533dd11ada22f50aaea8621adcdca --- .../Libraries/vendor/emitter/EventEmitter.js | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/react-native/Libraries/vendor/emitter/EventEmitter.js b/packages/react-native/Libraries/vendor/emitter/EventEmitter.js index 6bd20257222d73..904b77a3226756 100644 --- a/packages/react-native/Libraries/vendor/emitter/EventEmitter.js +++ b/packages/react-native/Libraries/vendor/emitter/EventEmitter.js @@ -15,13 +15,13 @@ export interface EventSubscription { export interface IEventEmitter { 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; @@ -71,7 +71,7 @@ export default class EventEmitter */ addListener>( eventType: TEvent, - listener: (...args: $ElementType) => mixed, + listener: (...args: TEventToArgsMap[TEvent]) => mixed, context: mixed, ): EventSubscription { if (typeof listener !== 'function') { @@ -79,11 +79,12 @@ export default class EventEmitter 'EventEmitter.addListener(...): 2nd argument must be a function.', ); } - const registrations = allocate<_, _, TEventToArgsMap[TEvent]>( - this._registry, - eventType, - ); - const registration: Registration<$ElementType> = { + const registrations = allocate< + TEventToArgsMap, + TEvent, + TEventToArgsMap[TEvent], + >(this._registry, eventType); + const registration: Registration = { context, listener, remove(): void { @@ -103,11 +104,10 @@ export default class EventEmitter */ emit>( eventType: TEvent, - ...args: $ElementType + ...args: TEventToArgsMap[TEvent] ): void { - const registrations: ?Set< - Registration<$ElementType>, - > = this._registry[eventType]; + const registrations: ?Set> = + this._registry[eventType]; if (registrations != null) { for (const registration of [...registrations]) { registration.listener.apply(registration.context, args); @@ -140,7 +140,7 @@ export default class EventEmitter function allocate< TEventToArgsMap: {...}, TEvent: $Keys, - TEventArgs: $ElementType, + TEventArgs: TEventToArgsMap[TEvent], >( registry: Registry, eventType: TEvent,