diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index f30c238e9da..f672446446b 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -56,7 +56,7 @@ interface PropOptions { export type PropType = PropConstructor | PropConstructor[] type PropConstructor = - | { new (...args: any[]): T & object } + | { new (...args: any[]): T & {} } | { (): T } | PropMethod diff --git a/test-dts/component.test-d.ts b/test-dts/component.test-d.ts index 30b3b8e5f53..06368e37778 100644 --- a/test-dts/component.test-d.ts +++ b/test-dts/component.test-d.ts @@ -39,6 +39,7 @@ describe('object props', () => { ggg: 'foo' | 'bar' ffff: (a: number, b: string) => { a: boolean } validated?: string + object?: object } describe('defineComponent', () => { @@ -106,7 +107,8 @@ describe('object props', () => { type: String, // validator requires explicit annotation validator: (val: unknown) => val !== '' - } + }, + object: Object as PropType }, setup(props) { return { @@ -140,6 +142,7 @@ describe('object props', () => { expectType(props.ggg) expectType(props.ffff) expectType(props.validated) + expectType(props.object) // raw bindings expectType(rawBindings.setupA) @@ -263,7 +266,8 @@ describe('object props', () => { type: String, // validator requires explicit annotation validator: (val: unknown) => val !== '' - } + }, + object: Object as PropType }, setup() { @@ -293,6 +297,7 @@ describe('object props', () => { expectType(props.ggg) // expectType(props.ffff) // todo fix expectType(props.validated) + expectType(props.object) // rawBindings expectType(rawBindings.setupA)