Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: relax Component type #11929

Merged
merged 1 commit into from
Jun 6, 2024
Merged

fix: relax Component type #11929

merged 1 commit into from
Jun 6, 2024

Commits on Jun 6, 2024

  1. fix: relax Component type

    The current type narrows the binding type to `""` by default, which means "no bindings on this component". While this is the common case, it makes it very cumbersome to use the `Component` type because legacy components are of type `string` and as soon as you have bindings, the type is something like `"foo" | "bar"` which _also_ is not assignable to `""` which is semantically wrong, because you should be able to assign a component that can have bindings to a type that accepts none.
    The pragmatic solution is to change the binding type to allow `string`, which means someone theoretically could use bindings with a component that doesn't have bindings:
    ```svelte
    <script>
      let component: Component<{ prop: boolean }> = IAcceptNoBindings;
    </script>
    <!-- allowed but should be a type error -->
    <svelte:component this={component} bind:prop={foo} />
    ```
    But this is a) rare anyway and b) can be caught at runtime
    
    This came up in comments of #11775
    dummdidumm committed Jun 6, 2024
    Configuration menu
    Copy the full SHA
    4f1f8d8 View commit details
    Browse the repository at this point in the history