mirror of https://github.com/sveltejs/svelte
fix: strip typescript assertions before analysis (#10329)
* strip typescript assertions before analysis * add test * changeset * move ts handling from transform to before analysis * format * types * remove unwrap_ts_expression --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>pull/10357/head
parent
2a31987da5
commit
bce4f3f01c
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"svelte": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: bindings with typescript assertions
|
@ -1,6 +1,19 @@
|
|||||||
import { test } from '../../test';
|
import { test } from '../../test';
|
||||||
|
import { expect, vi } from 'vitest';
|
||||||
|
|
||||||
|
const log = vi.fn();
|
||||||
|
|
||||||
export default test({
|
export default test({
|
||||||
html: '1 2 <div></div> <input type="number"> <input type="number">',
|
html: '1 2 <div></div> <div></div> <input type="number"> <input type="number">',
|
||||||
ssrHtml: '1 2 <div></div> <input type="number" value="1"> <input type="number" value="2">'
|
ssrHtml:
|
||||||
|
'1 2 <div></div> <div></div> <input type="number" value="1"> <input type="number" value="2">',
|
||||||
|
props: {
|
||||||
|
log
|
||||||
|
},
|
||||||
|
before_test() {
|
||||||
|
log.mockClear();
|
||||||
|
},
|
||||||
|
test() {
|
||||||
|
expect(log).toHaveBeenCalledWith('DIV', 'DIV');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
@ -1,14 +1,21 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
let { log } = $props();
|
||||||
|
|
||||||
let count = $state(1) as number;
|
let count = $state(1) as number;
|
||||||
let double = $derived(count as number * 2) as number;
|
let double = $derived(count as number * 2) as number;
|
||||||
|
|
||||||
let element = null;
|
let element = null;
|
||||||
|
let element_with_state = $state(null);
|
||||||
let with_state = $state({ foo: 1 });
|
let with_state = $state({ foo: 1 });
|
||||||
let without_state = { foo: 2 };
|
let without_state = { foo: 2 };
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
log(element.tagName, element_with_state.tagName);
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{count as number} {double as number}
|
{count as number} {double as number}
|
||||||
|
|
||||||
<div bind:this={element as HTMLElement}></div>
|
<div bind:this={element as HTMLElement}></div>
|
||||||
|
<div bind:this={element_with_state as HTMLElement}></div>
|
||||||
<input type="number" bind:value={(with_state as { foo: number }).foo} />
|
<input type="number" bind:value={(with_state as { foo: number }).foo} />
|
||||||
<input type="number" bind:value={(without_state as { foo: number }).foo as number} />
|
<input type="number" bind:value={(without_state as { foo: number }).foo as number} />
|
||||||
|
Loading…
Reference in new issue