Javascript 更好的扩展SVG.Element的方法,它让vscode知道已经进行了更改,并提供了文档

Javascript 更好的扩展SVG.Element的方法,它让vscode知道已经进行了更改,并提供了文档,javascript,node.js,svg,open-source,svg.js,Javascript,Node.js,Svg,Open Source,Svg.js,我正在使用,并且描述了一种在库中扩展类的方法,以便向扩展该类的所有对象添加额外的功能 我提出这个示例是为了为从SVG.Element继承的任何对象提供一个红色边界框 import * as SVG from '@svgdotjs/svg.js'; SVG.extend(SVG.Element, { bounding_box: function(margin) { var bbox = this.bbox() return this.parent().re

我正在使用,并且描述了一种在库中扩展类的方法,以便向扩展该类的所有对象添加额外的功能

我提出这个示例是为了为从
SVG.Element
继承的任何对象提供一个红色边界框

import * as SVG from '@svgdotjs/svg.js';

SVG.extend(SVG.Element, {
    bounding_box: function(margin) {
        var bbox = this.bbox()
        return this.parent().rect({
            x: bbox.x - margin/2,
            y: bbox.y - margin/2,
            width: bbox.width + margin,
            height: bbox.height + margin
        })
        .stroke("red")
        .attr("fill-opacity", 0)
    }
})
但是,尽管这是可行的,但在运行时发生这种情况的事实不允许vscode在继承自
SVG.Element
的对象上为该功能提供智能建议。同样,我无法向任何使用此功能文档的人提供此功能

我试图修改元素类主体中的
node_modules/@svg.js/dist/svg.node.js
文件以及
node_modules/@svgdotjs/svg.js/src/elements/Element.js
以包含我的功能,但尝试使用它时,我收到一个错误,说该功能不存在

我更愿意为这个网站做贡献,但在我能弄清楚这些该死的文件和什么能真正起作用之前,我恐怕没用了

为了将新功能写入库的
SVG.Element
类,我需要修改哪个文件?我是否需要克隆回购协议并进行重建


我以前从未做过开源,所以这将是我的第一次。干杯。

IntelliSense使用语法子集来增强代码的完整性。不幸的是,关于什么起作用或不起作用的文档并不完整。做出了很多承诺,但有效的清单要小得多

描述此类类扩展的正确JSDoc方法是使用对象文本的
@mixin MyExtension
注释作为
SVG.extend()的参数,然后使用
@mixes MyExtension
注释类。这在VSCode v1.48中不起作用

相反,虽然
@memberof
注释的使用被列为“buggy”,但它似乎起到了某种作用。要混合的方法必须与对象文字分开编写:

//mockup for the purpose of testing
const SVG = {};

SVG.Element = class {
    bbox () {
        return {x:0, y:0, width:1, height:1}
    }
    parent () {
        return this;
    }
}

/** 
 * @memberof SVG.Element
 * @param {number} margin
 */
function bounding_box (margin) {
    var bbox = this.bbox()
    return this.parent().rect({
        x: bbox.x - margin/2,
        y: bbox.y - margin/2,
        width: bbox.width + margin,
        height: bbox.height + margin
    })
    .stroke("red")
    .attr("fill-opacity", 0)
}

SVG.extend(SVG.Element, {bounding_box});
然后,将
边界框
函数中的
this
正确标识为类型
SVG.Element
。写作时

const el = SVG.Element();
el.bounding_box()
.bounding\u box
未作为提示中的方法列出,但键入的
margin
参数正确

在侧栏中,大纲将
.bounding_box
显示为
SVG.Element
的一个成员,但显示为一个属性,而不是一个方法


IntelliSense使用语法子集来增强代码的完整性。不幸的是,关于什么起作用或不起作用的文档并不完整。做出了很多承诺,但有效的清单要小得多

描述此类类扩展的正确JSDoc方法是使用对象文本的
@mixin MyExtension
注释作为
SVG.extend()的参数,然后使用
@mixes MyExtension
注释类。这在VSCode v1.48中不起作用

相反,虽然
@memberof
注释的使用被列为“buggy”,但它似乎起到了某种作用。要混合的方法必须与对象文字分开编写:

//mockup for the purpose of testing
const SVG = {};

SVG.Element = class {
    bbox () {
        return {x:0, y:0, width:1, height:1}
    }
    parent () {
        return this;
    }
}

/** 
 * @memberof SVG.Element
 * @param {number} margin
 */
function bounding_box (margin) {
    var bbox = this.bbox()
    return this.parent().rect({
        x: bbox.x - margin/2,
        y: bbox.y - margin/2,
        width: bbox.width + margin,
        height: bbox.height + margin
    })
    .stroke("red")
    .attr("fill-opacity", 0)
}

SVG.extend(SVG.Element, {bounding_box});
然后,将
边界框
函数中的
this
正确标识为类型
SVG.Element
。写作时

const el = SVG.Element();
el.bounding_box()
.bounding\u box
未作为提示中的方法列出,但键入的
margin
参数正确

在侧栏中,大纲将
.bounding_box
显示为
SVG.Element
的一个成员,但显示为一个属性,而不是一个方法