【发布时间】:2020-11-19 18:27:57
【问题描述】:
我正在实现以下类:
export class BbSVGElement extends HTMLElement implements HTMLCanvasElement { ... }
问题是我在打字稿中找不到<svg>元素的类型:<span>元素是HTMLSpanElement,<canvas>元素是HTMLCanvasElement等。
我问是因为要实现一个简单的任务,例如height() 函数,我需要获取元素的边界框。根据this stack overflow answer,这是正确的做法:
height(): number { return this.getBBox().height}
但是既然this指的是HTMLElement,当然Property 'getBBox' does not exist on type 'BbSVGElement'.ts(2339)
所以我尝试了各种类型的铸件;比如:
return (<SVGElement> this).getBBox().width
return (<SVGSVGElement> this).getBBox().width
我当然可以做类似的事情
return (<any> this).getBBox().width
或
return this.offsetWidth // <-- This property here comes from HTMLElement
但如果可能的话,我宁愿不要。
那么:什么是正确的演员阵容?还是我错过了其他选择?
【问题讨论】:
-
这里记录了 SVG 的 SVG-DOM 接口类型:developer.mozilla.org/en-US/docs/Web/API/…
-
SVGElement 不会在 HTML 下......它是独立的。我不使用 Typescript,但我猜您必须导入其他内容。
-
您在寻找
SVGGraphicsElement吗?这就是getBBox()method 的类型,对吧? -
BbSVGElement代表什么?您不应该使用extends HTMLElement implements HTMLCanvasElement,因为您没有重新实现<canvas>(而且<canvas>和SVG 无论如何都是完全不同的东西)——并且您不应该扩展HTMLElement,除非您正在定义HTML5 Web 组件。你到底想完成什么? -
@MarcheRemi 名称
SVGOrHtmlElement不正确,因为它是交集类型,而不是联合类型。您的案例的正确名称是SVGAndHtmlElement(或我在发布的答案中使用的SvgInHtml名称)。
标签: html typescript casting