首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TS 7015:元素隐式具有“任意”类型,因为索引表达式不是Object.keys of getElementsByTagName的“number”类型

TS 7015:元素隐式具有“任意”类型,因为索引表达式不是Object.keys of getElementsByTagName的“number”类型
EN

Stack Overflow用户
提问于 2022-09-27 18:31:56
回答 1查看 244关注 0票数 0

当试图键入来自Object.keys of getElementsByTagName(‘getElementsByTagName’)的键时,我有这个类型记录错误getElementsByTagName。

这是我的代码:

代码语言:javascript
复制
const buttonElements: HTMLCollectionOf<HTMLButtonElement> = blockRef.current.getElementsByTagName(
  'button',
);
if (buttonElements) {
  Object.keys(buttonElements).forEach((key: string) => {
    buttonElements[key].addEventListener('click', handleOpenModal, false);
  });
}

这里,我在key: string中使用了forEach()类型,并且在buttonElements[key]中得到了一个类型错误。我发现了其他人面临的类似问题,发现使用索引签名是解决方案,但是,考虑到该对象的类型为HTMLCollectionOf<HTMLButtonElement>,我不确定如何添加索引签名或扩展该对象。

方法我试过:

  • buttonElements[key as keyof HTMLCollectionOf<HTMLButtonElement>]
  • buttonElements[key as string]
  • const buttonElements: HTMLCollectionOf<string, HTMLButtonElement> = blockRef.current.getElementsByTagName('button',);

任何正确键入key或更好地输入buttonElements的帮助都是非常感谢的。谢谢大家!

EN

回答 1

Stack Overflow用户

发布于 2022-09-27 18:40:06

这是因为Object.keys()返回一个键数组,但是HTMLCollectionOf<>实际上包含一个将数字用作索引的对象。这意味着在使用key访问buttonElement集合中的任何条目之前,需要手动将buttonElement转换为number (例如,使用一元运算符++key):

代码语言:javascript
复制
Object.keys(buttonElements).forEach((key) => {
  buttonElements[+key].addEventListener('click', handleOpenModal, false);
});

此外,我建议您不要使用getElementsByTagName,因为querySelectorAll是一种更现代的方法,实际上是可迭代的,您可以使用for...of来遍历节点列表:

代码语言:javascript
复制
const buttonElements = blockRef.current.querySelectorAll('button');
for (const buttonElement of buttonElements) {
  buttonElement.addEventListener('click', handleOpenModal, false);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73872326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档