diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 0124a8b15..6b9144bf2 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 0a5895452..5a5f56fe6 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,