SVG.js:检测“元素”是否为“组”

时间:2019-02-16 01:07:29

标签: typescript svg.js

我需要确定通过SVG.get()检索的元素是否是组(SVG.G)。我以为这是一个简单的instanceof检查,但是我在Typescript中遇到了never类型错误。

代码如下:

    // Get the element from the <defs> section
    const newuse = svg.get(key);
    // Set the fill colour
    const fill = "red";
    // If it's a group, go through and fill all children with the "data- playerfill" attribute
    if ( newuse instanceof svg.G ) {
        // I have to do this in Typescript because the Set doesn't have a "fill" function defined
        (newuse as svg.G).select("[data-playerfill=true]").each(function(this: svg.Element) { this.fill(fill); });
    } else {
        // Just a single element that you fill
        newuse.fill(fill);
    }                            }

问题是我在最后一行收到以下错误:

Property 'fill' does not exist on type 'never'.

据我所知,这意味着else子句永远不会被求值。但是我不确定为什么。 all SVG.Element也是SVG.G吗?我当然不这么认为。

任何指导表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

由于现在已正确地将Svg.G声明为类,因此testof的instanceof现在应该可以在3.0.12中正常工作。

答案 1 :(得分:0)

此处的解决方法是不使用instanceof。在SVG.js(始终为v2.7.1)中使用is()方法。

if (x.is(SVG.G))