Open adiguba opened 2 months ago
I just faced this issue and it is indeed pretty ugly to have to do this. It's similar for component props, for example for a Shadcn UI Form with Superforms, you end up with something like this for a simple form component:
import { type SuperValidated, type Infer, superForm } from "sveltekit-superforms";
import { zodClient } from "sveltekit-superforms/adapters";
import * as Form from "$lib/components/ui/form/index.js";
import { Input } from "$lib/components/ui/input/index.js";
import { formSchema, type FormSchema } from "./schema";
interface FormProps {
data: SuperValidated<Infer<FormSchema>>;
}
const { data }: FormProps = $props();
const form = superForm(data, {
validators: zodClient(formSchema),
});
const { form: formData, enhance } = form;
What about making like this?
// +page.ts
export const load = () => {
return {
framework: "svelte",
version: 5
}
}
<script lang="ts">
// +page.svelte
import { PageProps } from './$types';
let { framework, version }: PageProps = $props()
</script>
A +page.svelte
file cannot get its props from anything other than the load method, right? So why have the extra "data" variable wrapping? I see why it was needed with Svelte 4, but it feels unnecessary with Svelte 5.
Describe the problem
Sveltekit generate a type
PageData
for each+page.svelte
, which allows to properly type thedata
prop :It's fine with Svelte 4, but with the new syntax in Svelte 5 we have to define an additional type for the $props runes :
Describe the proposed solution
The generated
$types
should include a new typePageProps
, in the following manner :Which would allow us to write directly :
Alternatives considered
Rewrite the $props() type on every page...
Importance
nice to have
Additional Information
No response