Open
Description
Describe the bug
In most cases, I'm trying to replace onMount with $effect, which seems to be the better way to go. However, $effect doesn't allow an async function:
<script lang="ts">
import type { Snippet } from 'svelte'
interface Props {
theme: string
children?: Snippet
}
let { theme, children }: Props = $props()
$effect(async () => {
await import(`@styles/themes/${theme}.scss`)
})
</script>
{@render children?.()}
Tying Error:
Argument of type '() => Promise<void>' is not assignable to parameter of type '() => void | (() => void)'.
Type 'Promise<void>' is not assignable to type 'void | (() => void)'.ts(2345)
Reproduction
See above
Logs
No response
System Info
System:
OS: macOS 15.0.1
CPU: (12) arm64 Apple M3 Pro
Memory: 76.77 MB / 18.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 20.15.1 - ~/.asdf/installs/nodejs/20.15.1/bin/node
Yarn: 4.3.1 - ~/.asdf/installs/nodejs/20.15.1/bin/yarn
npm: 10.8.2 - ~/.asdf/plugins/nodejs/shims/npm
bun: 1.1.0 - ~/.bun/bin/bun
Browsers:
Chrome: 130.0.6723.70
Safari: 18.0.1
npmPackages:
svelte: ^5.1.2 => 5.1.2
Severity
annoyance