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

SVG.js: Detecting if an `Element` is a `Group`

我需要确定通过 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 子句。但我不确定为什么。 全部 SVG.Element也是SVG.G吗?我当然不这么认为。

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

此处的解决方法是不使用 instanceof。使用 SVG.js 中的 is() 方法(v2.7.1,无论如何)。

if (x.is(SVG.G))

instanceof 测试现在应该可以在 3.0.12 中正常工作,因为 Svg.G 现在被正确声明为 class.