我正在尝试在CanvasRenderingContext2D类(它是canvas元素的上下文对象)上定义新方法。例如,
CanvasRenderingContext2D.prototype.dot=function(x, y) {
....
}
将是一种在(x,y)坐标处绘制具有特定样式的点的新方法(函数内部的确切代码与我的问题无关)。我的问题是,如何使VS代码智能感知识别这现在是CanvasRenderingContext2D的新方法?我尝试过像
这样的事情/**
* Draws a dot at the (x, y) coordinate
* @memberof CanvasRenderingContext2D#
* @param {number} x
* @param {number} y
*/
但它不起作用,当我写下CanvasRenderingContext2D的实例时,仍然只有原始成员显示在intellisense中。我如何使其工作?谢谢!
答案 0 :(得分:0)
您需要使用这样的自定义@typedef:
/**
* Draws a dot at the (x, y) coordinate
* @param {number} x
* @param {number} y
*/
const dot=function(x, y) {
}
CanvasRenderingContext2D.prototype.dot = dot;
/** @typedef {CanvasRenderingContext2D & { dot: dot }} MyCanvasRenderingContext2D */
/** @type {MyCanvasRenderingContext2D} */
const o = new CanvasRenderingContext2D();
o.dot();
答案 1 :(得分:-1)
似乎没有人有答案;在这种情况下,让我为那些可能有相同需求的人提供部分答案。可以在项目文件夹中创建一个新的lib.es6.d.ts文件,然后添加
>> a = np.linspace(-1.01, 1.01, 20)
array([-1.01 , -0.90368421, -0.79736842, -0.69105263, -0.58473684,
-0.47842105, -0.37210526, -0.26578947, -0.15947368, -0.05315789,
0.05315789, 0.15947368, 0.26578947, 0.37210526, 0.47842105,
0.58473684, 0.69105263, 0.79736842, 0.90368421, 1.01 ])
>> K.eval(tf.acos(K.variable(a)))
array([ nan, 2.69909317, 2.49371832, 2.33374068, 2.19535195,
2.06965208, 1.95207246, 1.83981909, 1.73095382, 1.62397929,
1.51761336, 1.41063884, 1.30177357, 1.1895202 , 1.07194058,
0.9462407 , 0.80785197, 0.64787434, 0.44249948, nan])
>> K.eval(tf.acos(K.clip(K.variable(a), -1, 1)))
array([3.14159265, 2.69909317, 2.49371832, 2.33374068, 2.19535195,
2.06965208, 1.95207246, 1.83981909, 1.73095382, 1.62397929,
1.51761336, 1.41063884, 1.30177357, 1.1895202 , 1.07194058,
0.9462407 , 0.80785197, 0.64787434, 0.44249948, 0. ])
声明新的点方法;这足以让intellisense在interface CanvasRenderingContext2D extends CanvasPathMethods {
dot(x:number, y:number):void;
}
的任何实例之后显示它。但是,这并不是一个完全的答案,因为不能转到点方法的实际定义(使用“转到定义”将仅转到所述的.d.ts文件,而不是代码的实际位置)。 / p>
即使我使用TypeScript而不是JavaScript重写了整个项目,我仍然找不到解决“转到定义”问题的方法。但是,我可以使声明尽可能接近该方法的实际代码,从而即使在技术上不可行,“转到定义”也可以实际使用。