|
@@ -21,6 +21,7 @@ import {
|
|
|
isOn,
|
|
isOn,
|
|
|
isReservedProp,
|
|
isReservedProp,
|
|
|
isString,
|
|
isString,
|
|
|
|
|
+ isSymbol,
|
|
|
makeMap,
|
|
makeMap,
|
|
|
toRawType,
|
|
toRawType,
|
|
|
} from '@vue/shared'
|
|
} from '@vue/shared'
|
|
@@ -777,7 +778,7 @@ function getInvalidTypeMessage(
|
|
|
if (
|
|
if (
|
|
|
expectedTypes.length === 1 &&
|
|
expectedTypes.length === 1 &&
|
|
|
isExplicable(expectedType) &&
|
|
isExplicable(expectedType) &&
|
|
|
- !isBoolean(expectedType, receivedType)
|
|
|
|
|
|
|
+ isCoercible(expectedType, receivedType)
|
|
|
) {
|
|
) {
|
|
|
message += ` with value ${expectedValue}`
|
|
message += ` with value ${expectedValue}`
|
|
|
}
|
|
}
|
|
@@ -793,7 +794,9 @@ function getInvalidTypeMessage(
|
|
|
* dev only
|
|
* dev only
|
|
|
*/
|
|
*/
|
|
|
function styleValue(value: unknown, type: string): string {
|
|
function styleValue(value: unknown, type: string): string {
|
|
|
- if (type === 'String') {
|
|
|
|
|
|
|
+ if (isSymbol(value)) {
|
|
|
|
|
+ return value.toString()
|
|
|
|
|
+ } else if (type === 'String') {
|
|
|
return `"${value}"`
|
|
return `"${value}"`
|
|
|
} else if (type === 'Number') {
|
|
} else if (type === 'Number') {
|
|
|
return `${Number(value)}`
|
|
return `${Number(value)}`
|
|
@@ -813,6 +816,9 @@ function isExplicable(type: string): boolean {
|
|
|
/**
|
|
/**
|
|
|
* dev only
|
|
* dev only
|
|
|
*/
|
|
*/
|
|
|
-function isBoolean(...args: string[]): boolean {
|
|
|
|
|
- return args.some(elem => elem.toLowerCase() === 'boolean')
|
|
|
|
|
|
|
+function isCoercible(...args: string[]): boolean {
|
|
|
|
|
+ return args.every(elem => {
|
|
|
|
|
+ const value = elem.toLowerCase()
|
|
|
|
|
+ return value !== 'boolean' && value !== 'symbol'
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|