Skip to content

Multiple export default in <script> — JS throws, TS does not #14101

@Fi2zz

Description

@Fi2zz

Version

3.5.24

Reproduction link

github.com

Steps to reproduce

  1. Clone the repo: https://github.com/Fi2zz/vue-compiler-ts-multi-export-default
  2. Install deps: yarn install (or npm install)
  3. JS repro: npx tsx compileJavascriptCode.ts
    • Expected result: throws duplicate default export error
    • Actual result: SyntaxError: [vue/compiler-sfc] Only one default export allowed per module.
  4. TS repro: npx tsx compileTypescriptCode.ts
    • Expected result: same error as JS (multiple default exports should be invalid)
    • Actual result: no error; logs include:
      • lang-> ts
      • content-> followed by two export default { ... } blocks

What is expected?

TypeScript and JavaScript should be consistent: when the same module contains multiple export default declarations, both should report an error.

What is actually happening?

  • JS: throws DuplicateDefaultExport (Only one default export allowed per module).
  • TS: no error; compileScript returns content keeping both default exports.

This repro uses vue/compiler-sfc with parse + compileScript.
Files of interest:

  • src/ComponentVanilla.vue (JS)
  • src/ComponentTS.vue (TS)
  • compile.ts (driver calling parse/compileScript)

<!-- generated by vue-issues. DO NOT REMOVE -->

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions