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', () => {