@@ -11,6 +11,7 @@ import { isHostElement } from './helpers/component-tree';
11
11
import { isHostTextInput } from './helpers/host-component-names' ;
12
12
import { isPointerEventEnabled } from './helpers/pointer-events' ;
13
13
import { isTextInputEditable } from './helpers/text-input' ;
14
+ import { StringWithAutocomplete } from './types' ;
14
15
15
16
type EventHandler = ( ...args : unknown [ ] ) => unknown ;
16
17
@@ -106,19 +107,17 @@ function getEventHandlerName(eventName: string) {
106
107
}
107
108
108
109
// String union type of keys of T that start with on, stripped of 'on'
109
- type OnKeys < T > = keyof {
110
+ type EventNameExtractor < T > = keyof {
110
111
[ K in keyof T as K extends `on${infer Rest } ` ? Uncapitalize < Rest > : never ] : T [ K ] ;
111
112
} ;
112
113
113
- // TS autocomplete trick
114
- // Ref: https://github.com/microsoft/TypeScript/issues/29729#issuecomment-567871939
115
- type EventName =
116
- | OnKeys < ViewProps >
117
- | OnKeys < TextProps >
118
- | OnKeys < TextInputProps >
119
- | OnKeys < PressableProps >
120
- | OnKeys < ScrollViewProps >
121
- | ( string & { } ) ;
114
+ type EventName = StringWithAutocomplete <
115
+ | EventNameExtractor < ViewProps >
116
+ | EventNameExtractor < TextProps >
117
+ | EventNameExtractor < TextInputProps >
118
+ | EventNameExtractor < PressableProps >
119
+ | EventNameExtractor < ScrollViewProps >
120
+ > ;
122
121
123
122
function fireEvent ( element : ReactTestInstance , eventName : EventName , ...data : unknown [ ] ) {
124
123
const handler = findEventHandler ( element , eventName ) ;
0 commit comments