React中调用firstElementChild.click()报属性不存在如何解决
问题根源
这是TypeScript静态类型校验抛出的错误,和运行时DOM是否获取正确无关。firstElementChild的返回值被TS标注为通用Element类型,而click()方法是定义在HTMLElement子类型上的,TS无法确定你拿到的通用Element一定具备click方法,所以在编译阶段直接拦截报错。你用console.log能正常打印DOM,是因为console.log是运行时行为,此时已经拿到了真实的DOM节点,不受静态类型检查影响。
解决方案
选任意一种即可:
- 类型断言(最简便,适合100%确定拿到的是普通DOM元素的场景)
直接手动告诉TS这个元素的实际类型,注意要给类型断言部分加括号,保证优先级正确:
如果你明确知道第一个子元素是具体标签,比如按钮、输入框,也可以断言成更精准的类型,比如(RefOfList.current.firstElementChild as HTMLElement).click()HTMLButtonElement、HTMLInputElement,能获得更准确的类型提示。 - 类型守卫(更稳妥,兼容极端场景)
加一层运行时判断,TS会自动完成类型缩窄,不需要手动断言,同时避免极端场景下拿到不支持click方法的元素(比如SVG内部元素等)导致运行时报错:const targetNode = RefOfList.current.firstElementChild if (targetNode instanceof HTMLElement) { targetNode.click() }
内容的提问来源于stack exchange,提问作者Jenny Le
相关产品推荐
相关产品推荐

