Как менять тип относительно входящих данных? typescript
В функцию onChange приходит переменная dates зависящая от атрибута selectsRange (reactDatePicker). Если selectsRange === true в dates приходит массив с 2-мя Date, а без просто Date.
type IOnChangeRange = [Date | null, Date | null]
type IOnChangeSingle = Date | null
Я пытался сделать так, но так не работает. Работает только по отдельности.
const onChange = (dates: IOnChangeRange | IOnChangeSingle) => {
if(selectsRange){
const [start, end] = dates;
setStartDate(start);
setEndDate(end);
} else {
setStartDate(dates);
}
};
Подскажите как сделать правильно прописать типы. Выходит ошибка на строке: const [start, end] = dates;:
Type 'IOnChangeRange | IOnChangeSingle' is not an array type.
и на строке setStartDate(dates):
Argument of type 'IOnChangeRange | IOnChangeSingle' is not assignable to parameter of type 'SetStateAction<Date | null>'.
Type 'IOnChangeRange' is not assignable to type 'SetStateAction<Date | null>'.
Type '[Date | null, Date | null]' is not assignable to type 'Date'.
Ответы (1 шт):
Автор решения: NaN-Simon
→ Ссылка
Нашел такое решение. Не знаю на сколько это правильно, но сработало.
const onChange = (dates: IOnChangeRange | IOnChangeSingle) => {
if(Array.isArray(dates)){
const [start, end] = dates;
setStartDate(start);
setEndDate(end);
} else {
setStartDate(dates);
}
};