6

const [data, Setdata] = useState<number[] >([]);
const [inputData, SetinputData] = useState<number>(0);
const [canAdd, SetcanAdd] = useState<boolean>(true);

  const numberField = (event: React.ChangeEvent<HTMLInputElement>) => {
    SetcanAdd(false)
    SetinputData(event.target.value);


    if(data.includes(event.target.value)){
      SetcanAdd(true)
    }

    // event.target.value Argument of type string is not assignable to parameter of type number
  };

  //jsx
    <input
        onChange={numberField }
        placeholder="add numbers"
        type="number"
        value={inputData}
     />

How can I set the event.target.value to be a number?

I know I can set everything to string, but I want it to be a number

3 Answers 3

21

Changed event.target.value to event.target.valueAsNumber.

Works now!

Edit: Lol, the answer was in my title

Sign up to request clarification or add additional context in comments.

1 Comment

For passers by, this solution doesn't work if your HTML element is a <select><option>. See: stackoverflow.com/questions/57489670/…
4

In JS, it won't be a number, even if the input is of type="number":

const val = document.querySelector('input').value;
console.log(typeof val);
console.log(val);
<input type="number" value=80>

So you shouldn't try to have event.target.value be typed as a number, because it isn't.

You'll have to convert it to a number yourself explicitly, if that's what you want.

const numValue = Number(event.target.value);
// use numValue

1 Comment

This. Plus you can use parseInt or parseFloat to convert it.
4

you can try:

  1. event.target.valueAsNumber

  2. +event.target.value

  3. Number(event.target.value)

  4. parseInt(event.target.value) || parseFloat(event.target.value)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.