From 97e569aa8078b4b181640b5158c6d689aee0eb8e Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Mon, 6 Apr 2026 19:03:03 +0800 Subject: [PATCH 1/2] fix(types): infer emits from SetupContext --- .../dts-test/defineComponent.test-d.tsx | 7 ++++++ packages/runtime-core/src/component.ts | 22 +++++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 6188b102b31..585b693b4f6 100644 --- a/packages-private/dts-test/defineComponent.test-d.tsx +++ b/packages-private/dts-test/defineComponent.test-d.tsx @@ -1175,6 +1175,13 @@ describe('componentOptions setup should be `SetupContext`', () => { ) }) +describe('infer emits from SetupContext', () => { + const Foo = defineComponent({ + setup(_, _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 From 0f93ce1a787d6a28bf156876a9a81a3707e10169 Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Tue, 7 Apr 2026 08:20:52 +0800 Subject: [PATCH 2/2] chore: update test --- packages-private/dts-test/defineComponent.test-d.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 585b693b4f6..12da320c244 100644 --- a/packages-private/dts-test/defineComponent.test-d.tsx +++ b/packages-private/dts-test/defineComponent.test-d.tsx @@ -1176,10 +1176,15 @@ 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', () => {