【发布时间】:2021-12-20 06:31:20
【问题描述】:
我正在使用 useRef,并访问它的子元素。
我收到了这个错误。
元素隐式具有“any”类型,因为“number”类型的表达式不能用于索引类型“{}”。 在“{}”类型上找不到带有“数字”类型参数的索引签名
代码是
const subCnt = useRef<HTMLDivElement>();
useEffect(()=>{
if (!(subCnt.current?.children?.length! > 0)) return
let lastChild: ReactNode = subCnt.current?.children;
lastChild = lastChild[lastChild?.length - 1]; //Getting the error here
...
})
我收到错误的行是lastChild = lastChild[lastChild?.length - 1];
为什么会出现这个错误?
【问题讨论】:
-
它告诉您缺少空检查,如果空检查,则放置一个,这应该会消失
-
@vaira 我试过了。
lastChild![lastChild!?.length! - 1]甚至lastChild ? lastChild[lastChild?.length - 1] : undefined还是不行。 -
if(lastChind) {lastChild = lastChild[lastChild?.length - 1];}
-
而不是 ReactNode 使用类型 HTMLCollection
-
对 React 了解不多,但 ReactNode 被定义为 Iterable
,这可能就是为什么它甚至不会抱怨您将 lastChild键入为ReactNode而不是 @987654327 @。但是你不能在Iterable上做[index]。这就是你错误的根源。你可以先做Array.from(lastChild),然后再做[]。但我认为只使用两个变量而不是一个变量并使用HTMLCollection而不是 ReactNode 会更好。
标签: javascript reactjs typescript