@@ -12,6 +12,7 @@ import type {
1212 EmitsOptions ,
1313 EmitsToProps ,
1414 ObjectEmitsOptions ,
15+ ShortEmitsToObject ,
1516 TypeEmitsToOptions ,
1617} from './componentEmits'
1718import type {
@@ -169,18 +170,17 @@ type InferComponentOptions<
169170 > &
170171 TypeProps &
171172 EmitsToProps <
172- // ResolvedEmits
173173 ExtractMixinEmits < Mixin > &
174174 ExtractMixinEmits < Extends > &
175- ( unknown extends TypeEmits
176- ? string [ ] extends RuntimeEmitsOptions
177- ? { }
178- : RuntimeEmitsOptions extends ( infer Keys extends
179- string ) [ ]
180- ? { [ K in Keys ] : ( ... args : any ) => any }
181- : RuntimeEmitsOptions
182- : { } ) &
183- TypeEmitsToOptions < TypeEmits & { } >
175+ ResolveEmitsOptions < RuntimeEmitsOptions & { } , TypeEmits > &
176+ TypeEmitsToOptions <
177+ string [ ] extends RuntimeEmitsOptions
178+ ? TypeEmits & { }
179+ : ResolveTypeEmits <
180+ RuntimeEmitsOptions & { } ,
181+ TypeEmits
182+ > & { }
183+ >
184184 >
185185 > ,
186186 ExtractMixinSetupBindings < Mixin > &
@@ -195,17 +195,9 @@ type InferComponentOptions<
195195 ExtractMixinMethods < Mixin > &
196196 ExtractMixinMethods < Extends > &
197197 Methods & { } ,
198- // ResolvedEmits
199198 ExtractMixinEmits < Mixin > &
200199 ExtractMixinEmits < Extends > &
201- ( unknown extends TypeEmits
202- ? string [ ] extends RuntimeEmitsOptions
203- ? { }
204- : RuntimeEmitsOptions extends ( infer Keys extends string ) [ ]
205- ? { [ K in Keys ] : ( ...args : any ) => any }
206- : RuntimeEmitsOptions
207- : { } ) &
208- TypeEmitsToOptions < TypeEmits & { } > ,
200+ ResolveEmitsOptions < RuntimeEmitsOptions & { } , TypeEmits > ,
209201 PublicProps ,
210202 MakeDefaultsOptional extends boolean
211203 ? Defaults
@@ -226,7 +218,8 @@ type InferComponentOptions<
226218 Slots & { } ,
227219 Exposed & string ,
228220 TypeRefs & { } ,
229- TypeEl & Element
221+ TypeEl & Element ,
222+ ResolveTypeEmits < RuntimeEmitsOptions & { } , TypeEmits >
230223 >
231224 } & ConcreteComponentOptions
232225 : { } )
@@ -255,6 +248,28 @@ export type DefineSetupFnComponent<
255248 S
256249>
257250
251+ type ResolveEmitsOptions <
252+ RuntimeEmitsOptions extends EmitsOptions ,
253+ TypeEmits extends ComponentTypeEmits | unknown ,
254+ > = unknown extends TypeEmits
255+ ? RuntimeEmitsOptions extends ObjectEmitsOptions
256+ ? RuntimeEmitsOptions
257+ : { }
258+ : TypeEmits extends Record < string , any [ ] >
259+ ? ShortEmitsToObject < TypeEmits >
260+ : { }
261+
262+ type ResolveTypeEmits <
263+ RuntimeEmitsOptions extends EmitsOptions ,
264+ TypeEmits extends ComponentTypeEmits | unknown ,
265+ > = TypeEmits extends ( ...args : any [ ] ) => any
266+ ? TypeEmits
267+ : TypeEmits extends Record < string , any [ ] >
268+ ? { }
269+ : RuntimeEmitsOptions extends ( infer Keys extends string ) [ ]
270+ ? ( event : Keys , ...args : any [ ] ) => void
271+ : { }
272+
258273// defineComponent is a utility that is primarily used for type inference
259274// when declaring components. Type inference is provided in the component
260275// options (provided as the argument). The returned value has artificial types
@@ -322,19 +337,8 @@ export function defineComponent<
322337 // resolved types
323338 ResolvedEmits extends ObjectEmitsOptions = ExtractMixinEmits < Mixin > &
324339 ExtractMixinEmits < Extends > &
325- ( unknown extends TypeEmits
326- ? string [ ] extends RuntimeEmitsOptions
327- ? { }
328- : RuntimeEmitsOptions extends ( infer Keys extends string ) [ ]
329- ? { [ K in Keys ] : ( ...args : any ) => any }
330- : RuntimeEmitsOptions
331- : { } ) &
332- TypeEmitsToOptions < TypeEmits & { } > ,
333- ResolvedEmits_Internal extends EmitsOptions = unknown extends TypeEmits
334- ? string [ ] extends RuntimeEmitsOptions
335- ? string [ ]
336- : ResolvedEmits
337- : ResolvedEmits ,
340+ ResolveEmitsOptions < RuntimeEmitsOptions , TypeEmits > ,
341+ ResolvedTypeEmits = ResolveTypeEmits < RuntimeEmitsOptions , TypeEmits > ,
338342 InferredProps = Readonly <
339343 ExtractPropTypes <
340344 ExtractMixinProps < Mixin > &
@@ -346,7 +350,14 @@ export function defineComponent<
346350 : { } )
347351 > &
348352 TypeProps &
349- EmitsToProps < ResolvedEmits >
353+ EmitsToProps <
354+ ResolvedEmits &
355+ TypeEmitsToOptions <
356+ string [ ] extends RuntimeEmitsOptions
357+ ? TypeEmits & { }
358+ : ResolvedTypeEmits & { }
359+ >
360+ >
350361 > ,
351362 InternalInstance = ComponentPublicInstance <
352363 InferredProps ,
@@ -356,7 +367,7 @@ export function defineComponent<
356367 ExtractMixinData < Mixin > & ExtractMixinData < Extends > & EnsureNonVoid < Data > ,
357368 ExtractMixinComputed < Mixin > & ExtractMixinComputed < Extends > & Computed ,
358369 ExtractMixinMethods < Mixin > & ExtractMixinMethods < Extends > & Methods ,
359- ResolvedEmits_Internal ,
370+ ResolvedEmits ,
360371 { } , // PublicProps
361372 { } , // Defaults
362373 false ,
@@ -365,7 +376,8 @@ export function defineComponent<
365376 Slots ,
366377 Exposed ,
367378 TypeRefs ,
368- TypeEl
379+ TypeEl ,
380+ ResolvedTypeEmits
369381 > ,
370382> (
371383 options : {
@@ -390,7 +402,11 @@ export function defineComponent<
390402 setup ?: (
391403 this : void ,
392404 props : LooseRequired < InferredProps > ,
393- ctx : NoInfer < SetupContext < ResolvedEmits_Internal , Slots > > ,
405+ ctx : NoInfer <
406+ SetupContext < ResolvedEmits , Slots > & {
407+ emit : ResolvedTypeEmits
408+ }
409+ > ,
394410 ) => Promise < SetupBindings > | SetupBindings | RenderFunction | void
395411 data ?: ( vm : NoInfer < InternalInstance > ) => Data
396412 /**
0 commit comments