From: Evan You Date: Thu, 5 Sep 2024 08:44:25 +0000 (+0800) Subject: fix(types): fix defineComponent props inference when setup() has explicit annotation X-Git-Tag: v3.5.2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fca20a39aa4a6f98c8f972bd435ebb7dc535648a;p=thirdparty%2Fvuejs%2Fcore.git fix(types): fix defineComponent props inference when setup() has explicit annotation close #11803 --- diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 0124a8b152..6b9144bf29 100644 --- a/packages-private/dts-test/defineComponent.test-d.tsx +++ b/packages-private/dts-test/defineComponent.test-d.tsx @@ -1041,6 +1041,18 @@ describe('emits', () => { }, }) + // #11803 manual props annotation in setup() + const Hello = defineComponent({ + name: 'HelloWorld', + inheritAttrs: false, + props: { foo: String }, + emits: { + customClick: (args: string) => typeof args === 'string', + }, + setup(props: { foo?: string }) {}, + }) + ; {}} /> + // without emits defineComponent({ setup(props, { emit }) { diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index 0a58954526..5a5f56fe6f 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -134,6 +134,9 @@ export type DefineSetupFnComponent< S > +type ToResolvedProps = Readonly & + Readonly> + // defineComponent is a utility that is primarily used for type inference // when declaring components. Type inference is provided in the component // options (provided as the argument). The returned value has artificial types @@ -210,8 +213,6 @@ export function defineComponent< : ExtractPropTypes : { [key in RuntimePropsKeys]?: any } : TypeProps, - ResolvedProps = Readonly & - Readonly>, TypeRefs extends Record = {}, >( options: { @@ -229,7 +230,7 @@ export function defineComponent< */ __typeRefs?: TypeRefs } & ComponentOptionsBase< - ResolvedProps, + ToResolvedProps, SetupBindings, Data, Computed, @@ -249,7 +250,7 @@ export function defineComponent< > & ThisType< CreateComponentPublicInstanceWithMixins< - ResolvedProps, + ToResolvedProps, SetupBindings, Data, Computed, @@ -278,7 +279,7 @@ export function defineComponent< ResolvedEmits, RuntimeEmitsKeys, PublicProps, - ResolvedProps, + ToResolvedProps, ExtractDefaultPropTypes, Slots, LocalComponents,