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
) 而不是更改道具类型。
我正在尝试将 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
) 而不是更改道具类型。