使用TypeScript选择SVG圆

使用TypeScript选择SVG圆,typescript,dom,svg,Typescript,Dom,Svg,我的DOM中有一个非常简单的SVG元素,我想用TypeScript选择它: <svg viewBox="0 0 200 200"> <circle cx="50" cy="50" r="45" id="myCircle"/> </svg> 第一次尝试: 我尝试如下选择圆: var-circle:svgcirclelement=document.get

我的DOM中有一个非常简单的SVG
元素,我想用TypeScript选择它:

<svg viewBox="0 0 200 200">
  <circle cx="50" cy="50" r="45" id="myCircle"/>
</svg>


第一次尝试: 我尝试如下选择圆:

var-circle:svgcirclelement=document.getElementById(“myCircle”)

但我得到了一个错误:

类型“HtmleElement”缺少以下属性:cx、cy、r

好吧,很公平。所以我尝试类型断言:

第二次尝试:
var-circle:svgcirclelement=(document.getElementById(“myCircle”)

我得到了一个错误:

将HtmleElement类型转换为SVGCircleElement可能是错误的,因为

这种选择元素的方法似乎适用于其他元素,例如
,但不适用于SVG:

问题:
TypeScript批准的从DOM中选择
myCircle
的方法是什么,最好不使用类型强制?(顺便说一句,我使用的是Typescript 3.3)

这至少是一种定义typeguards的方法,它允许您向Typescript证明这确实是一个圆,没有“最佳方法”,这实际上取决于用例,但我觉得这是一种更强的铸造方法

const isHTMLCircle = (something: HTMLElement | SVGCircleElement): something is SVGCircleElement => {
    if(!something) return false;
    return something instanceof SVGCircleElement;
}

const getSvgCircleById = (id: string): SVGCircleElement | null => {
    const element = document.getElementById("id");
    if(!element) return null;
    if(isHTMLCircle(element)) {
        return element;
    }
    return null;
}

因此,唯一的方法是仍然强制转换到
类型?我很惊讶TypeScript没有一种内置的方式来做这件事…你不需要强制转换我会编辑代码段,没有内置的东西让我们来做吧,因为javascript中没有getSvgById,getElementById不可能通过静态分析知道您试图获取的元素的类型。Iv'e添加了一个带有getSvgCricleById函数的编辑,该函数允许您获取SVG圆形类型,没有任何强制转换。。。对于一个简单的元素选择器来说,这需要很多代码。我想我会坚持使用myCircle:svgcircleeElement=document.getElementById(“myCircle”)