If you're using TypeScript, you can declare the prop types:
If you're using TypeScript, you can declare the prop types:
<!-- prettier-ignore -->
```ts
```ts
type MyProps = any;
interface MyProps {
// ---cut---
required: string;
let { a, b, c, ...everythingElse }: MyProps = $props();
optional?: number;
partOfEverythingElse?: boolean;
};
let { required, optional, ...everythingElse }: MyProps = $props();
```
```
> In an earlier preview, `$props()` took a type argument. This caused bugs, since in a case like this...
> In an earlier preview, `$props()` took a type argument. This caused bugs, since in a case like this...
>
>
> ```ts
> ```ts
> // @errors: 2558
> // @errors: 2558
> let { x = 42 } = $props<{ x: string }>();
> let { x = 42 } = $props<{ x?: string }>();
> ```
> ```
>
>
> ...TypeScript [widens the type](https://www.typescriptlang.org/play?#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXwBIAHGHIgZwB4AVeAXnilQE8A+ACgEoAueagbgBQgiCAzwA3vAAe9eABYATPAC+c4qQqUp03uQwwsqAOaqOnIfCsB6a-AB6AfiA) of `x` to be `string | number`, instead of erroring.
> ...TypeScript [widens the type](https://www.typescriptlang.org/play?#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXwBIAHGHIgZwB4AVeAXnilQE8A+ACgEoAueagbgBQgiCAzwA3vAAe9eABYATPAC+c4qQqUp03uQwwsqAOaqOnIfCsB6a-AB6AfiA) of `x` to be `string | number`, instead of erroring.