У меня есть очень простая функция, которая возвращает ввод и его значение. Проблема в том, что я не знаю, как присвоить элемент JSX переменной. При использовании обычного React все нормально, а вот с TypeScript у меня ошибка. Вот сама функция:
export const useInput = () => {
const [val, setInputValue] = React.useState("");
const inputValueHandler = (e: React.FormEvent<HTMLInputElement>) => {
const currentTarget = e.target as HTMLInputElement;
setInputValue(currentTarget.value);
};
const input: JSX.Element = <input value={val} onChange={inputValueHandler}/>;
return [val, input];
}
здесь появляется ошибка
const input: JSX.Element = <input value={val} onChange={inputValueHandler}/>;
ошибка
"input" refers to a value, but is used as a type here. Did you mean "typeof input"?ts(2749)
Проблема в том, что вы не сообщаете TypeScript, что этот код использует JSX, поэтому он думает, что <input ...
является началом утверждение типа (вид угловой скобки, а не вид as
). (Плейграунд ссылка на ошибку с игровой площадкой, настроенной на запрет JSX.)
Если вы сообщите TypeScript, что этот код является JSX (например, поместив его в файл .tsx
), он будет работать нормально. (Пример игровой площадки без ошибок, если игровая площадка настроена на поддержку JSX.)
Большое спасибо! Да, проблема была в том, что я указал неверное расширение файла - ts вместо tsx!
Я не могу воспроизвести эту ошибку! Было бы возможно, если бы вы могли сделать детскую площадку? typescriptlang.org/игровая площадка