Skip to content

Migrate to Svelte 5: Don't add types for "Zero-effort type safety" data props #13724

@danieldiekmeier

Description

@danieldiekmeier

Describe the bug

I'm using the great "zero-effort type safety" features introduced here: https://svelte.dev/blog/zero-config-type-safety and they work great.

However, running pnpm dlx svelte-migrate svelte-5 introduces a Props interface that disables this feature. Of course, this only applies to routes/**/+*.svelte files.

Svelte 4 code:

<script lang="ts">
  export let data
</script>

Automatically migrated Svelte 5 code:

<script lang="ts">
  interface Props {
    data: any;
  }

  let { data }: Props = $props();
</script>

It would be better if the migration would skip these cases, like this:

<script lang="ts">
  let { data } = $props();
</script>

Reproduction

https://stackblitz.com/edit/sveltejs-kit-template-default-zv2yea?description=The%20default%20SvelteKit%20template,%20generated%20with%20create-svelte&file=src%2Froutes%2F%2Bpage.svelte&title=SvelteKit%20Default%20Template

  • Run pnpm dlx svelte-migrate svelte-5
  • migrate files in src
  • src/routes/+page.svelte now has interface Props { data: any; } :(

Logs

No response

System Info

System:
    OS: macOS 14.6.1
    CPU: (10) arm64 Apple M1 Max
    Memory: 12.58 GB / 64.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 20.18.0 - ~/.asdf/installs/nodejs/20.18.0/bin/node
    npm: 10.8.2 - ~/.asdf/plugins/nodejs/shims/npm
    pnpm: 9.12.2 - ~/.asdf/installs/nodejs/20.18.0/bin/pnpm
  Browsers:
    Chrome: 129.0.6668.101
    Edge: 130.0.2849.46
    Safari: 17.6
    Safari Technology Preview: 18.0
  npmPackages:
    @sveltejs/kit: ^2.7.1 => 2.7.1
    svelte: ^5.0.0 => 5.0.3

Severity

annoyance

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions