sch*_*pet 5 javascript jsdoc typescript reactjs
使用 typescript 的 jsdoc 支持键入以下javascript代码:
const [optionalNumber, setOptionalNumber] = useState(null)
const handleClick = () => {
setOptionalNumber(42)
// ^-- Argument of type '42' is not assignable to parameter of type 'SetStateAction<null>'
}
Run Code Online (Sandbox Code Playgroud)
我目前解决这个问题的方式有效,但有点难看:
const [optional, setOptional] = useState(
/** @type {number|null} */ (null)
)
Run Code Online (Sandbox Code Playgroud)
我怎样才能在不使用铸造的情况下实现这一点?我想要optional一种null | number, 并且setOptional只接受null | number作为参数。
代码和盒子展示了这一点:https ://codesandbox.io/s/optimistic-villani-kbudi?fontsize
=14
假设您的组件依赖于optional状态的初始状态作为null值(而不是undefined),一种解决方案是显式指定状态钩子类型作为两者的联合类型number,如下null所示:
// Allows initial value to be null, and number to be subsequently set
const [optional, setOptional] = useState<number | null>(null);
// optional === null
setOptional(42);
Run Code Online (Sandbox Code Playgroud)
或者,如果您的组件无法区分初始状态值undefined或null初始optional状态值,则可以使用以下方法:
const [optional, setOptional] = useState<number>();
// optional === undefined
setOptional(42);
Run Code Online (Sandbox Code Playgroud)
我认为您可以使用正确的联合类型定义初始值并将其传递给useState.
它会是这样的:
/**
* @type {number | null}
*/
const initValue = 42;
const [optionalNumber, setOptionalNumber] = useState(initValue)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2237 次 |
| 最近记录: |