From: 翠 / green Date: Mon, 14 Nov 2022 09:33:29 +0000 (+0900) Subject: fix(types): allow assigning wider SetupContext type (#2818) X-Git-Tag: v3.2.46~63 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb2a83283caa9de0a45881d860a3cbd9d0bdd279;p=thirdparty%2Fvuejs%2Fcore.git fix(types): allow assigning wider SetupContext type (#2818) fix #2362 --- diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 3fdf566bb9..786e3f3a03 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 3463995613..5678c8e1ce 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) + }) +})