From eb2a83283caa9de0a45881d860a3cbd9d0bdd279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Mon, 14 Nov 2022 18:33:29 +0900 Subject: [PATCH] fix(types): allow assigning wider SetupContext type (#2818) fix #2362 --- packages/runtime-core/src/component.ts | 15 +++++++++------ test-dts/component.test-d.ts | 12 +++++++++++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 3fdf566bb98..786e3f3a030 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -180,12 +180,15 @@ export const enum LifecycleHooks { SERVER_PREFETCH = 'sp' } -export interface SetupContext { - attrs: Data - slots: Slots - emit: EmitFn - expose: (exposed?: Record) => void -} +// use `E extends any` to force evaluating type to fix #2362 +export type SetupContext = E extends any + ? { + attrs: Data + slots: Slots + emit: EmitFn + expose: (exposed?: Record) => void + } + : never /** * @internal diff --git a/test-dts/component.test-d.ts b/test-dts/component.test-d.ts index 3463995613c..5678c8e1ceb 100644 --- a/test-dts/component.test-d.ts +++ b/test-dts/component.test-d.ts @@ -11,7 +11,9 @@ import { FunctionalComponent, ComponentPublicInstance, toRefs, - IsAny + IsAny, + SetupContext, + expectAssignable } from './index' declare function extractComponentOptions( @@ -476,3 +478,11 @@ describe('class', () => { expectType(props.foo) }) + +describe('SetupContext', () => { + describe('can assign', () => { + const wider: SetupContext<{ a: () => true; b: () => true }> = {} as any + + expectAssignable true }>>(wider) + }) +})