From: skirtle <65301168+skirtles-code@users.noreply.github.com> Date: Fri, 10 Nov 2023 06:32:10 +0000 (+0000) Subject: dx(runtime-core): warn when the prop type is `[]` (#7608) X-Git-Tag: v3.3.9~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5491e1cdd1359e59aa26aa67038c2c73a7eb360;p=thirdparty%2Fvuejs%2Fcore.git dx(runtime-core): warn when the prop type is `[]` (#7608) --- diff --git a/packages/runtime-core/__tests__/componentProps.spec.ts b/packages/runtime-core/__tests__/componentProps.spec.ts index 89112f2ad4..885e80090a 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 4d40278955..3a1798b934 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(' | ')}`