fix: don't emit invalid export on type/interface declarations in the instance script#3078
Closed
spokodev wants to merge 1 commit into
Closed
fix: don't emit invalid export on type/interface declarations in the instance script#3078spokodev wants to merge 1 commit into
export on type/interface declarations in the instance script#3078spokodev wants to merge 1 commit into
Conversation
…e instance script `export type`/`export interface` in the instance script kept their `export` keyword inside the render function when they weren't hoisted to the module scope (e.g. when $props() has no explicit type), producing a "Modifiers cannot appear here" error. Strip the keyword in that case, mirroring the existing handling of exported functions and classes. Fixes sveltejs#2832
🦋 Changeset detectedLatest commit: 2aceaa5 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Member
|
I think removing the modifier will only make it even more confusing. You can't import it, and there is no error message indicating a problem. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #2832
export type/export interfacein the instance script keep theirexportkeyword inside the generated render function when they aren't hoisted to the module scope, e.g. when$props()has no explicit type or there are no props at all.exportisn't valid on a declaration inside a function body, so TypeScript reports "Modifiers cannot appear here." on an otherwise valid component.Repro:
Adding a typed
const {}: Props = $props()makes the error disappear, because the hoisting path then moves the type out to the module scope — which is why this is easy to miss.Fix: strip the
exportkeyword from top-level type/interface declarations that stay inside the render function (the ones that don't get hoisted), mirroring the existing handling for exported functions and classes inhandleExportFunctionOrClass. Hoisted declarations are left untouched so they remain importable from other components.Adds a regression test.