diff --git a/packages/runtime-core/__tests__/componentProps.spec.ts b/packages/runtime-core/__tests__/componentProps.spec.ts index 89112f2ad..885e80090 100644 --- a/packages/runtime-core/__tests__/componentProps.spec.ts +++ b/packages/runtime-core/__tests__/componentProps.spec.ts @@ -336,7 +336,8 @@ describe('component props', () => { obj: { type: Object }, cls: { type: MyClass }, fn: { type: Function }, - skipCheck: { type: [Boolean, Function], skipCheck: true } + skipCheck: { type: [Boolean, Function], skipCheck: true }, + empty: { type: [] } }, setup() { return () => null @@ -351,7 +352,8 @@ describe('component props', () => { obj: 'false', cls: {}, fn: true, - skipCheck: 'foo' + skipCheck: 'foo', + empty: [1, 2, 3] }), nodeOps.createElement('div') ) @@ -379,6 +381,9 @@ describe('component props', () => { expect( `Invalid prop: type check failed for prop "skipCheck". Expected Boolean | Function, got String with value "foo".` ).not.toHaveBeenWarned() + expect( + `Prop type [] for prop "empty" won't match anything. Did you mean to use type Array instead?` + ).toHaveBeenWarned() }) // #3495 diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index 4d4027895..3a1798b93 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -725,6 +725,12 @@ function getInvalidTypeMessage( value: unknown, expectedTypes: string[] ): string { + if (expectedTypes.length === 0) { + return ( + `Prop type [] for prop "${name}" won't match anything.` + + ` Did you mean to use type Array instead?` + ) + } let message = `Invalid prop: type check failed for prop "${name}".` + ` Expected ${expectedTypes.map(capitalize).join(' | ')}`