使用TypeScript设置HtmleElement

使用TypeScript设置HtmleElement,typescript,Typescript,我正在将我的旧JavaScript转换为TypeScript。我有一个目录JSX组件,可以轻松滚动到特定的标题 我使用函数查找滚动到指定标题所需的总滚动偏移量。将此文件转换为“.tsx”文件后,出现错误: 类型“Element”缺少类型“HtmleElement”中的以下属性:accessKey、accessKeyLabel、autocapitalize、dir等 如何设置传递给累加器offsettop的参数类型?由于el.offsetParent属于元素| null类型,而不是HTMLElem

我正在将我的旧JavaScript转换为TypeScript。我有一个目录JSX组件,可以轻松滚动到特定的标题

我使用函数查找滚动到指定标题所需的总滚动偏移量。将此文件转换为“.tsx”文件后,出现错误:

类型“Element”缺少类型“HtmleElement”中的以下属性:accessKey、accessKeyLabel、autocapitalize、dir等


如何设置传递给
累加器offsettop
的参数类型?

由于
el.offsetParent
属于
元素| null
类型,而不是
HTMLElement | null
类型,因此引发错误。默认情况下,
el.offsetParent
不返回
HTMLElement
的原因是,
el.offsetParent
也可能导致不同类型的
元素,例如
SVGElement
()。您必须在此处使用,并可能确保返回的值是
HTMLElement
(如果需要)。

由于
el.offsetParent
的类型为
Element | null
而不是
HTMLElement | null
而引发错误。默认情况下,
el.offsetParent
不返回
HTMLElement
的原因是,
el.offsetParent
也可能导致不同类型的
元素,例如
SVGElement
()。您必须在此处使用,如果需要,可能需要确保返回的值是
HTMLElement

我最后得到的答案使用类型断言

const accumulateOffsetTop = ( el: HTMLElement, totalOffset = 0 ) : number => {
  while ( el ) {
    totalOffset += el.offsetTop - el.scrollTop + el.clientTop
    el = el.offsetParent as HTMLElement
  }
  return totalOffset
}

我得到的答案是使用类型断言

const accumulateOffsetTop = ( el: HTMLElement, totalOffset = 0 ) : number => {
  while ( el ) {
    totalOffset += el.offsetTop - el.scrollTop + el.clientTop
    el = el.offsetParent as HTMLElement
  }
  return totalOffset
}

当我记录传递给函数的值时,它们是我希望在TOC中使用的头。如何断言它们是元素?当我记录传递给函数的值时,它们是我希望在TOC中使用的头。如何断言它们是元素?
const accumulateOffsetTop = ( el: HTMLElement, totalOffset = 0 ) : number => {
  while ( el ) {
    totalOffset += el.offsetTop - el.scrollTop + el.clientTop
    el = el.offsetParent as HTMLElement
  }
  return totalOffset
}