diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 6188b102b31..12da320c244 100644 --- a/packages-private/dts-test/defineComponent.test-d.tsx +++ b/packages-private/dts-test/defineComponent.test-d.tsx @@ -1175,6 +1175,18 @@ describe('componentOptions setup should be `SetupContext`', () => { ) }) +describe('infer emits from SetupContext', () => { + // options + const Foo = defineComponent({ + setup(_, _ctx: SetupContext<['foo']>) {}, + }) + ; {}}> + + // functional + const Bar = defineComponent((_, _ctx: SetupContext<['foo']>) => () => {}) + ; {}}> +}) + describe('extract instance type', () => { const Base = defineComponent({ props: { diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index c46741bee80..7c9a6ab661b 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -284,20 +284,14 @@ export type { ComponentOptions } export type LifecycleHook = (TFn & SchedulerJob)[] | null -// use `E extends any` to force evaluating type to fix #2362 -export type SetupContext< - E = EmitsOptions, - S extends SlotsType = {}, -> = E extends any - ? { - attrs: Attrs - slots: UnwrapSlotsType - emit: EmitFn - expose: = Record>( - exposed?: Exposed, - ) => void - } - : never +export type SetupContext = { + attrs: Attrs + slots: UnwrapSlotsType + emit: EmitFn + expose: = Record>( + exposed?: Exposed, + ) => void +} /** * @internal