I have this Svelte 5 code:
<script lang="ts">
type BaseProps = {
required?: boolean;
};
type SingleDateProps = BaseProps & {
range?: false | undefined;
dates?: Date | null;
onchange?: (e: Date | undefined) => void;
};
type RangeDateProps = BaseProps & {
range: true;
dates?: Date[] | null;
onchange?: (e: Date[] | undefined) => void;
};
type Props = SingleDateProps | RangeDateProps;
let {
dates = $bindable(),
range = false,
onchange
}: Props = $props();
</script>
in this component the dates are properly seen like dates: Date[] | undefined (note the range prop):
<DateComponent
range
onchange={(dates) => {
// use dates here
}}
/>
if I use this component instead (without the range prop):
<DateComponent
onchange={(dates) => {
// use dates here
}}
/>
dates now is seeing like any:
Parameter 'dates' implicitly has an 'any' type. ts(7006)
(parameter) dates: any
Why?