React useState 道具:类型 'string' 不可分配给类型 'number'。 TS2322

React useState Props: Type 'string' is not assignable to type 'number'. TS2322

我正在尝试将 Props 传递给 React useState Hooks。我的道具和编号都是必需的,但我收到 Typescript 错误:

Type 'string' is not assignable to type 'number'. TS2322

但我没有将字符串传递到任何地方。所以,我不知道为什么我会得到这个 Typescript。我不想传递道具 any.

import React, { useState } from "react";
import ReactDOM from "react-dom";

interface Props {
  strength: number;
  speed: number;
}

const Courseinfo = ({ strength, speed }: Props) => (
  <>
    <div>
      <h1>{strength}</h1>
      <h1>{speed}</h1>
    </div>
  </>
);

const App = () => {
  const [character, setCharacter] = useState<Props>({ // This Props throws me error 
    strength: 0,
    speed: 0,
  });

  const { strength, speed } = character;
  return (
    <>
      Strength:
      <input
        type="number"
        value={strength}
        onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
          setCharacter({ ...character, strength: e.target.value })
        }
      />
      Speed:
      <input
        type="number"
        value={speed}
        onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
          setCharacter({ ...character, speed: e.target.value })
        }
      />
      <Courseinfo strength={strength} speed={speed} />
    </>
  );
};

ReactDOM.render(<App />, document.getElementById("root"));

input type="number"的值为字符串

这是固定的 sandbox

变化:

interface Props {
  strength: string;
  speed: string;
}

事件类型可以是

onChange={(e: React.ChangeEvent<HTMLInputElement>) =>

或者,您也可以将 event.target.value 转换为数字 (+event.target.number) 而不是更改道具类型。