diff --git a/vue-language-tools/vue-language-core/src/generators/script.ts b/vue-language-tools/vue-language-core/src/generators/script.ts index 0bed8ecd5..f7c5951fa 100644 --- a/vue-language-tools/vue-language-core/src/generators/script.ts +++ b/vue-language-tools/vue-language-core/src/generators/script.ts @@ -242,7 +242,7 @@ export function generate( 0, { diagnostic: true }, ]); - codeGen.push('export default '); + codeGen.push('export default ('); } if (vueCompilerOptions.experimentalRfc436 && sfc.scriptSetup.generic) { codeGen.push(`<${sfc.scriptSetup.generic}>`); @@ -373,29 +373,41 @@ export function generate( writeTemplate(); - codeGen.push(`return {} as Omit & Omit, '$slots' | '$emit'>`); - codeGen.push(` & {\n`); - if (scriptSetupRanges.propsTypeArg) { - codeGen.push(`props: typeof __VLS_props,\n`); - } - else { - codeGen.push(`props: InstanceType['$props'],\n`); - } - codeGen.push(`$emit: `); - if (scriptSetupRanges.emitsTypeArg) { - addVirtualCode('scriptSetup', scriptSetupRanges.emitsTypeArg.start, scriptSetupRanges.emitsTypeArg.end); + if (vueCompilerOptions.experimentalRfc436) { + codeGen.push(`return {} as Omit & Omit, '$slots' | '$emit'>`); + codeGen.push(` & {\n`); + if (scriptSetupRanges.propsTypeArg) { + codeGen.push(`props: typeof __VLS_props,\n`); + } + else { + codeGen.push(`props: InstanceType['$props'],\n`); + } + codeGen.push(`$emit: `); + if (scriptSetupRanges.emitsTypeArg) { + addVirtualCode('scriptSetup', scriptSetupRanges.emitsTypeArg.start, scriptSetupRanges.emitsTypeArg.end); + } + else { + codeGen.push(`InstanceType['$emit']`); + } + codeGen.push(`,\n`); + if (htmlGen?.slotsNum) { + codeGen.push(`children: ReturnType,\n`); + } + codeGen.push(`};\n`); } else { - codeGen.push(`InstanceType['$emit']`); - } - codeGen.push(`,\n`); - if (htmlGen?.slotsNum) { - codeGen.push(`children: ReturnType,\n`); + codeGen.push(`return {} as typeof __VLS_Component`); + if (htmlGen?.slotsNum) { + codeGen.push(` & new () => { $slots: ReturnType }`); + } + codeGen.push(`;\n`); } codeGen.push(`};\n`); - codeGen.push(`};\n`); codeGen.push(`return {} as unknown as Awaited>;\n`); - codeGen.push(`}`); + codeGen.push(`})`); + if (!vueCompilerOptions.experimentalRfc436) { + codeGen.push(`({} as any)`); + } if (scriptRanges?.exportDefault && scriptRanges.exportDefault.expression.end !== scriptRanges.exportDefault.end) { addVirtualCode('script', scriptRanges.exportDefault.expression.end, scriptRanges.exportDefault.end); }