mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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
This commit is contained in:
committed by
Facebook GitHub Bot
parent
e6f77112a7
commit
3ff0160139
+13
-13
@@ -15,13 +15,13 @@ export interface EventSubscription {
|
||||
export interface IEventEmitter<TEventToArgsMap: {...}> {
|
||||
addListener<TEvent: $Keys<TEventToArgsMap>>(
|
||||
eventType: TEvent,
|
||||
listener: (...args: $ElementType<TEventToArgsMap, TEvent>) => mixed,
|
||||
listener: (...args: TEventToArgsMap[TEvent]) => mixed,
|
||||
context?: mixed,
|
||||
): EventSubscription;
|
||||
|
||||
emit<TEvent: $Keys<TEventToArgsMap>>(
|
||||
eventType: TEvent,
|
||||
...args: $ElementType<TEventToArgsMap, TEvent>
|
||||
...args: TEventToArgsMap[TEvent]
|
||||
): void;
|
||||
|
||||
removeAllListeners<TEvent: $Keys<TEventToArgsMap>>(eventType?: ?TEvent): void;
|
||||
@@ -71,7 +71,7 @@ export default class EventEmitter<TEventToArgsMap: {...}>
|
||||
*/
|
||||
addListener<TEvent: $Keys<TEventToArgsMap>>(
|
||||
eventType: TEvent,
|
||||
listener: (...args: $ElementType<TEventToArgsMap, TEvent>) => mixed,
|
||||
listener: (...args: TEventToArgsMap[TEvent]) => mixed,
|
||||
context: mixed,
|
||||
): EventSubscription {
|
||||
if (typeof listener !== 'function') {
|
||||
@@ -79,11 +79,12 @@ export default class EventEmitter<TEventToArgsMap: {...}>
|
||||
'EventEmitter.addListener(...): 2nd argument must be a function.',
|
||||
);
|
||||
}
|
||||
const registrations = allocate<_, _, TEventToArgsMap[TEvent]>(
|
||||
this._registry,
|
||||
eventType,
|
||||
);
|
||||
const registration: Registration<$ElementType<TEventToArgsMap, TEvent>> = {
|
||||
const registrations = allocate<
|
||||
TEventToArgsMap,
|
||||
TEvent,
|
||||
TEventToArgsMap[TEvent],
|
||||
>(this._registry, eventType);
|
||||
const registration: Registration<TEventToArgsMap[TEvent]> = {
|
||||
context,
|
||||
listener,
|
||||
remove(): void {
|
||||
@@ -103,11 +104,10 @@ export default class EventEmitter<TEventToArgsMap: {...}>
|
||||
*/
|
||||
emit<TEvent: $Keys<TEventToArgsMap>>(
|
||||
eventType: TEvent,
|
||||
...args: $ElementType<TEventToArgsMap, TEvent>
|
||||
...args: TEventToArgsMap[TEvent]
|
||||
): void {
|
||||
const registrations: ?Set<
|
||||
Registration<$ElementType<TEventToArgsMap, TEvent>>,
|
||||
> = this._registry[eventType];
|
||||
const registrations: ?Set<Registration<TEventToArgsMap[TEvent]>> =
|
||||
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<TEventToArgsMap: {...}>
|
||||
function allocate<
|
||||
TEventToArgsMap: {...},
|
||||
TEvent: $Keys<TEventToArgsMap>,
|
||||
TEventArgs: $ElementType<TEventToArgsMap, TEvent>,
|
||||
TEventArgs: TEventToArgsMap[TEvent],
|
||||
>(
|
||||
registry: Registry<TEventToArgsMap>,
|
||||
eventType: TEvent,
|
||||
|
||||
Reference in New Issue
Block a user