Skip to content

Commit b38a660

Browse files
fix: improve DatePickerProps discriminated union type inference
This fix addresses issue #5391 where TypeScript was not properly inferring the onChange callback type based on selectsRange and selectsMultiple props. The problem was that using 'never' as the discriminant type for optional properties didn't allow TypeScript to properly narrow the union type. Changes: - Changed selectsRange?: never to selectsRange?: false | undefined - Changed selectsMultiple?: never to selectsMultiple?: false | undefined - Updated test file to use correct type for selectsMultiple prop This allows TypeScript to correctly infer: - onChange receives Date | null when selectsRange is false/undefined - onChange receives [Date | null, Date | null] when selectsRange is true - onChange receives Date[] | null when selectsMultiple is true Fixes #5391
1 parent f318d4b commit b38a660

File tree

2 files changed

+8
-9
lines changed

2 files changed

+8
-9
lines changed

src/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,8 @@ export type DatePickerProps = OmitUnion<
218218
) => void;
219219
} & (
220220
| {
221-
selectsRange?: never;
222-
selectsMultiple?: never;
221+
selectsRange?: false | undefined;
222+
selectsMultiple?: false | undefined;
223223
formatMultipleDates?: never;
224224
onChange?: (
225225
date: Date | null,
@@ -230,7 +230,7 @@ export type DatePickerProps = OmitUnion<
230230
}
231231
| {
232232
selectsRange: true;
233-
selectsMultiple?: never;
233+
selectsMultiple?: false | undefined;
234234
formatMultipleDates?: never;
235235
onChange?: (
236236
date: [Date | null, Date | null],
@@ -240,7 +240,7 @@ export type DatePickerProps = OmitUnion<
240240
) => void;
241241
}
242242
| {
243-
selectsRange?: never;
243+
selectsRange?: false | undefined;
244244
selectsMultiple: true;
245245
formatMultipleDates?: (
246246
dates: Date[],

src/test/multiple_selected_dates.test.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ describe("Multiple Dates Selected", function () {
1414
extraProps: Partial<
1515
Pick<
1616
DatePickerProps,
17-
| "selectsMultiple"
18-
| "shouldCloseOnSelect"
19-
| "disabledKeyboardNavigation"
20-
| "onSelect"
17+
"shouldCloseOnSelect" | "disabledKeyboardNavigation" | "onSelect"
2118
>
2219
> &
2320
OmitUnion<
@@ -28,7 +25,9 @@ describe("Multiple Dates Selected", function () {
2825
| "disabledKeyboardNavigation"
2926
| "onSelect"
3027
| "selectsRange"
31-
>,
28+
> & {
29+
selectsMultiple?: true;
30+
},
3231
) {
3332
return render(
3433
<DatePicker

0 commit comments

Comments
 (0)