当试图键入来自Object.keys of getElementsByTagName(‘getElementsByTagName’)的键时,我有这个类型记录错误getElementsByTagName。
这是我的代码:
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的帮助都是非常感谢的。谢谢大家!
发布于 2022-09-27 18:40:06
这是因为Object.keys()返回一个键数组,但是HTMLCollectionOf<>实际上包含一个将数字用作索引的对象。这意味着在使用key访问buttonElement集合中的任何条目之前,需要手动将buttonElement转换为number (例如,使用一元运算符+:+key):
Object.keys(buttonElements).forEach((key) => {
buttonElements[+key].addEventListener('click', handleOpenModal, false);
});此外,我建议您不要使用getElementsByTagName,因为querySelectorAll是一种更现代的方法,实际上是可迭代的,您可以使用for...of来遍历节点列表:
const buttonElements = blockRef.current.querySelectorAll('button');
for (const buttonElement of buttonElements) {
buttonElement.addEventListener('click', handleOpenModal, false);
}https://stackoverflow.com/questions/73872326
复制相似问题