Argument of type 'string' is not assignable to parameter of type 'SetStateAction '
В компоненте React есть функция, которая вызывается при изменении состояния :
function handleMove(e: React.ChangeEvent<HTMLSelectElement>) {
setSelected(e.target.value);
confirmMove(task, e.target.value);
}
В строке setSelected(e.target.value); IDE выдает ошибку
Argument of type 'string' is not assignable to parameter of type 'SetStateAction '.
Во первых, с каких пор в setState нельзя присваивать string? Во-вторых, я в стейте чётко указал, что стейт может быть типом Property:
const [selected, setSelected] = useState<Priority>('none');
который, в свою очередь, является типом:
export type Priority = 'none' | 'priority1' | 'priority2' | 'priority3' | 'priority4';
который может принимать только строковые значения.
Вот как выглядит компонент, из которого приходит value:
const Select: React.FC<ISelectProps> = ({ selected, handleChange, width, height }) => {
return (
<StyledSelect
onChange={handleChange}
value={selected}
width={width}
height={height}
>
<optgroup label='Срочность'>
<option value='none'>Не указывать</option>
<option value='priority1'>(1) Важная срочная</option>
<option value='priority2'>(2) Важная несрочная</option>
<option value='priority3'>(3) Неважная срочная</option>
<option value='priority4'>(4) Неважная несрочная</option>
</optgroup>
</StyledSelect>
);
};
export default React.memo(Select);
Из компонента видно, что значения у selected могут быть только те, которые указаны в типе Priority.
И кстати для этого компонента тоже указан интерфейс для пропс, и в нем тип Priority безотказно работает:
export interface ISelectProps {
selected: Priority;
handleChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
width?: string;
height?: string;
}