diff --git a/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap b/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap index fce04c85112..e1a84bcf50b 100644 --- a/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap @@ -517,6 +517,7 @@ export default /*@__PURE__*/_defineComponent({ qux: { type: Function, required: false, default() { return 1 } }, quux: { type: Function, required: false, default() { } }, quuxx: { type: Promise, required: false, async default() { return await Promise.resolve('hi') } }, + quuux: { type: Number, required: false, default(a, [b, ...c], {d, ...e}, ...f) { return 1 } }, fred: { type: String, required: false, get default() { return 'fred' } } }, setup(__props: any, { expose: __expose }) { diff --git a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts index 836badb51c8..b390bf7ee45 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts @@ -387,12 +387,14 @@ const props = defineProps({ foo: String }) qux?(): number; quux?(): void quuxx?: Promise; + quuux?: number; fred?: string }>(), { foo: 'hi', qux() { return 1 }, ['quux']() { }, async quuxx() { return await Promise.resolve('hi') }, + quuux(a, [b, ...c], {d, ...e}, ...f) { return 1 }, get fred() { return 'fred' } }) @@ -412,6 +414,9 @@ const props = defineProps({ foo: String }) expect(content).toMatch( `quuxx: { type: Promise, required: false, async default() { return await Promise.resolve('hi') } }`, ) + expect(content).toMatch( + `quuux: { type: Number, required: false, default(a, [b, ...c], {d, ...e}, ...f) { return 1 } }`, + ) expect(content).toMatch( `fred: { type: String, required: false, get default() { return 'fred' } }`, ) @@ -423,6 +428,7 @@ const props = defineProps({ foo: String }) qux: BindingTypes.PROPS, quux: BindingTypes.PROPS, quuxx: BindingTypes.PROPS, + quuux: BindingTypes.PROPS, fred: BindingTypes.PROPS, props: BindingTypes.SETUP_CONST, }) diff --git a/packages/compiler-sfc/src/script/defineProps.ts b/packages/compiler-sfc/src/script/defineProps.ts index 9a4880a1a54..fde4850deba 100644 --- a/packages/compiler-sfc/src/script/defineProps.ts +++ b/packages/compiler-sfc/src/script/defineProps.ts @@ -260,9 +260,15 @@ function genRuntimePropFromType( // prop has corresponding static default value defaultString = `default: ${ctx.getString(prop.value)}` } else { + let paramsString = '' + if (prop.params.length) { + const start = prop.params[0].start + const end = prop.params[prop.params.length - 1].end + paramsString = ctx.getString({ start, end } as Node) + } defaultString = `${prop.async ? 'async ' : ''}${ prop.kind !== 'method' ? `${prop.kind} ` : '' - }default() ${ctx.getString(prop.body)}` + }default(${paramsString}) ${ctx.getString(prop.body)}` } } }