From b8db888d8f8176d1db64e33058d827c195fd5f2c Mon Sep 17 00:00:00 2001 From: Arsen Stahanov Date: Thu, 1 Feb 2018 02:17:28 +0200 Subject: [PATCH 1/2] fix(props): consider prop types order for default bool value --- src/core/util/props.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/util/props.js b/src/core/util/props.js index bea6c92691e..9e69913422e 100644 --- a/src/core/util/props.js +++ b/src/core/util/props.js @@ -31,7 +31,10 @@ export function validateProp ( if (isType(Boolean, prop.type)) { if (absent && !hasOwn(prop, 'default')) { value = false - } else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) { + } else if ( + (!isType(String, prop.type) || prop.type.indexOf(String) > prop.type.indexOf(Boolean)) && + (value === '' || value === hyphenate(key)) + ) { value = true } } From 1ceafceaf00cfe5429840d362e4d407add302d55 Mon Sep 17 00:00:00 2001 From: Arsen Stahanov Date: Thu, 8 Feb 2018 01:56:52 +0200 Subject: [PATCH 2/2] fix(props): add test for [Boolean, String] props --- test/unit/features/component/component.spec.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/unit/features/component/component.spec.js b/test/unit/features/component/component.spec.js index 34c037a1e74..c3afc110073 100644 --- a/test/unit/features/component/component.spec.js +++ b/test/unit/features/component/component.spec.js @@ -276,6 +276,23 @@ describe('Component', () => { expect(vm.$el.outerHTML).toBe('') }) + it('must consider the order of props when using Boolean and String types', () => { + const vm = new Vue({ + template: '', + components: { + test: { + template: '
', + props: { + booleanOrString: [Boolean, String], + stringOrBoolean: [String, Boolean] + } + } + } + }).$mount() + expect(vm.$refs.test.$props.booleanOrString).toBe(true) + expect(vm.$refs.test.$props.stringOrBoolean).toBe('') + }) + it('should warn when using camelCased props in in-DOM template', () => { new Vue({ data: {