Skip to content

Commit 4dfb988

Browse files
authored
fix: relax component constructor type (#2524)
Since , we're no longer adding the `[evt: string]: CustomEvent<any>` index signature to components in runes mode not using `createEventDispatcher`. This revealed a type bug in our `ATypedSvelteComponent` type. It was to restricting, because TypeScript will resolve the empty event object to a handler with callback type `never`, which then means the `__sveltets_2_ensureComponent` generic no longer picks the right type, resulting in generics not being resolved properly. Fix this by relaxing the constraints. Fixes #2523
1 parent fc2144b commit 4dfb988

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script lang="ts" generics="T">
2+
let { value, defaultValue }: { value: T; defaultValue?: T } = $props();
3+
</script>
4+
5+
{value}
6+
{defaultValue}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[
2+
{
3+
"code": 2322,
4+
"message": "Type 'number' is not assignable to type 'string'.",
5+
"range": {
6+
"end": {
7+
"character": 36,
8+
"line": 10
9+
},
10+
"start": {
11+
"character": 24,
12+
"line": 10
13+
}
14+
},
15+
"severity": 1,
16+
"source": "ts",
17+
"tags": []
18+
}
19+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script lang="ts">
2+
import ValueComponent from './ValueComponent.svelte';
3+
4+
let value = $state("test");
5+
</script>
6+
7+
<!-- ok -->
8+
<ValueComponent {value} defaultValue={"foo"} />
9+
10+
<!-- error -->
11+
<ValueComponent {value} defaultValue={1} />

packages/svelte2tsx/svelte-shims-v4.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ declare type ATypedSvelteComponent = {
207207
*/
208208
$$slot_def: any;
209209

210-
$on(event: string, handler: ((e: any) => any) | null | undefined): () => void;
210+
$on(event: string, handler: any): () => void;
211211
}
212212
/**
213213
* Ambient type only used for intellisense, DO NOT USE IN YOUR PROJECT.

0 commit comments

Comments
 (0)