File tree Expand file tree Collapse file tree 2 files changed +49
-5
lines changed Expand file tree Collapse file tree 2 files changed +49
-5
lines changed Original file line number Diff line number Diff line change @@ -43,11 +43,23 @@ export type ReservedOrUserListener<
43
43
ReservedEvents extends EventsMap ,
44
44
UserEvents extends EventsMap ,
45
45
Ev extends ReservedOrUserEventNames < ReservedEvents , UserEvents >
46
- > = Ev extends EventNames < ReservedEvents >
47
- ? ReservedEvents [ Ev ]
48
- : Ev extends EventNames < UserEvents >
49
- ? UserEvents [ Ev ]
50
- : never ;
46
+ > = FallbackToUntypedListener <
47
+ Ev extends EventNames < ReservedEvents >
48
+ ? ReservedEvents [ Ev ]
49
+ : Ev extends EventNames < UserEvents >
50
+ ? UserEvents [ Ev ]
51
+ : never
52
+ > ;
53
+
54
+ /**
55
+ * Returns an untyped listener type if `T` is `never`; otherwise, returns `T`.
56
+ *
57
+ * This is a hack to mitigate https://github.com/socketio/socket.io/issues/3833.
58
+ * Needed because of https://github.com/microsoft/TypeScript/issues/41778
59
+ */
60
+ type FallbackToUntypedListener < T > = [ T ] extends [ never ]
61
+ ? ( ...args : any [ ] ) => void
62
+ : T ;
51
63
52
64
/**
53
65
* Interface for classes that aren't `EventEmitter`s, but still expose a
Original file line number Diff line number Diff line change @@ -44,6 +44,38 @@ describe("server", () => {
44
44
} ) ;
45
45
} ) ;
46
46
} ) ;
47
+
48
+ it ( "infers 'any' for listener parameters of other events using enums" , ( ) => {
49
+ const srv = createServer ( ) ;
50
+ const sio = new Server ( srv ) ;
51
+ srv . listen ( ( ) => {
52
+ sio . on ( "connection" , ( socket ) => {
53
+ expectType < Socket < DefaultEventsMap , DefaultEventsMap > > ( socket ) ;
54
+ } ) ;
55
+
56
+ enum Events {
57
+ CONNECTION = "connection" ,
58
+ TEST = "test" ,
59
+ }
60
+
61
+ sio . on ( Events . CONNECTION , ( socket ) => {
62
+ // TODO(#3833): Make this expect `Socket<DefaultEventsMap, DefaultEventsMap>`
63
+ expectType < any > ( socket ) ;
64
+
65
+ socket . on ( "test" , ( a , b , c ) => {
66
+ expectType < any > ( a ) ;
67
+ expectType < any > ( b ) ;
68
+ expectType < any > ( c ) ;
69
+ } ) ;
70
+
71
+ socket . on ( Events . TEST , ( a , b , c ) => {
72
+ expectType < any > ( a ) ;
73
+ expectType < any > ( b ) ;
74
+ expectType < any > ( c ) ;
75
+ } ) ;
76
+ } ) ;
77
+ } ) ;
78
+ } ) ;
47
79
} ) ;
48
80
49
81
describe ( "emit" , ( ) => {
You can’t perform that action at this time.
0 commit comments