React+TypeScript使用useRef时报错current不存在于never类型ts(2339)
错误原因
- 核心问题出在条件判断的逻辑运算符使用错误:你使用了逻辑或(||),同时额外加了无意义的
ref != null判断。useRef返回的对象本身永远不会为null,所以ref != null判断永远为真,进入分支后TS无法对ref.current做类型收窄,反而会因为多余的空值判断触发类型推断异常,认为ref属于不可能存在的never类型,因此抛出不存在current属性的错误。 - 次要问题是你没有正确做
ref.current的空值校验,无法保证访问时current已经绑定了对应的DOM元素。
修复方案
方案1:修正条件判断
直接判断ref.current是否存在即可,不需要判断ref本身是否为空:
const ref = useRef<HTMLDivElement>(null); useEffect(() => { if (ref.current) { setHeight(ref.current.clientHeight); } }, [user]);
方案2:可选链简写
如果不需要额外分支逻辑,可以用可选链+空值合并运算符简化代码,同时避免赋值undefined:
useEffect(() => { setHeight(ref.current?.clientHeight ?? 0); }, [user]);
额外注意
务必在对应的DOM元素上正确绑定ref,否则current永远为null,无法拿到高度值:
<div ref={ref}>需要计算高度的内容</div>
内容的提问来源于stack exchange,提问作者user16590865
相关产品推荐
相关产品推荐

