From: HcySunYang Date: Wed, 24 Feb 2021 21:20:41 +0000 (+0800) Subject: types: support object as props type (#3165) X-Git-Tag: v3.0.7~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4a965802e883107a2af00301a59fb7f403b6acf7;p=thirdparty%2Fvuejs%2Fcore.git types: support object as props type (#3165) --- diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index f30c238e9d..f672446446 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 30b3b8e5f5..06368e3777 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)