@Mark321

Как типизировать значение?

Хочу заюзать календарик с тапйпскриптом, но получаю ошибку, если навести на
setDateRange(update);

ошибка следующая
Argument of type '[Date | null, Date | null]' is not assignable to parameter of type 'SetStateAction<null[]>'.
  Type '[Date | null, Date | null]' is not assignable to type 'null[]'.
    Type 'Date | null' is not assignable to type 'null'.
      Type 'Date' is not assignable to type 'null'

() => {
  const [dateRange, setDateRange] = useState([null, null]);
  const [startDate, endDate] = dateRange;
  return (
    <DatePicker
      selectsRange={true}
      startDate={startDate}
      endDate={endDate}
      onChange={(update) => {
        setDateRange(update);
      }}
      isClearable={true}
    />
  );
};

Как это типизировать?
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Если ты не указываешь при useState тип стейта руками, то он выводится автоматически.

useState([null, null]); - ts выведет тут тип null[], то есть массив null, про Date он никак догадаться не может. Следует указать явно: useState<Array<Date | null>>([null, null]);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Mindgrow
1. Делаешь класс с полями startDate, endDate. Типизируешь их типом Date|null. Так проще чем коллекцией.
2. Типизируешь useState<этот класс>(new..)
3. Проверь что возвращает update, точно ли он там коллекцию возвращает, если да, то либо 1,2 вернуть на коллекцию, либо сделать так чтобы стейт был объектом, а не массивом.

Ругается он у тебя на то, что ты сейчас инициализируешь стейт типом null[]
А возвращаемое значене имеет тип Date|null
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы