【发布时间】:2020-02-07 06:55:51
【问题描述】:
使用 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>'
}
我目前解决这个问题的方式可行,但有点难看:
const [optional, setOptional] = useState(
/** @type {number|null} */ (null)
)
如何在不使用强制转换的情况下完成此操作?我希望optional 具有null | number 的类型,而setOptional 只接受null | number 作为参数。
codesandbox 演示了这个:
https://codesandbox.io/s/optimistic-villani-kbudi?fontsize=14
【问题讨论】:
-
使用 undefined 代替 null:
const [optional, setOptional] = useState() -
我仍然希望将其限制为 {null|number} - 没有参数的 useState 会导致可选为
any -
更新了更多关于此的上下文
-
目前不可能...有一个未解决的问题:github.com/microsoft/TypeScript/issues/27387
标签: javascript reactjs typescript jsdoc