首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让VS Code intellisense识别附加到现有类的新方法

如何让VS Code intellisense识别附加到现有类的新方法
EN

Stack Overflow用户
提问于 2018-06-17 23:36:27
回答 2查看 1K关注 0票数 2

我正尝试在类CanvasRenderingContext2D (它是canvas元素的上下文对象)上定义新方法。例如,

代码语言:javascript
复制
CanvasRenderingContext2D.prototype.dot=function(x, y) {
    ....
}

将是一种新的方法,它在(x,y)坐标上绘制一个具有特定样式的点(函数内部的确切代码与我的问题无关)。我的问题是,我如何让VS代码智能感知认识到这是一种新的CanvasRenderingContext2D方法?我试过像这样的东西

代码语言:javascript
复制
/**
 * Draws a dot at the (x, y) coordinate
 * @memberof CanvasRenderingContext2D#
 * @param {number} x 
 * @param {number} y 
 */

但是它不起作用,当我写下CanvasRenderingContext2D的一个实例时,仍然只有原始成员显示在智能感知中。我该如何让它工作呢?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-13 14:19:51

似乎没有人有答案;在这种情况下,让我为那些可能有相同需求的人提供部分答案。用户可以在项目文件夹中创建一个新的lib.es6.d.ts文件,然后添加

代码语言:javascript
复制
interface CanvasRenderingContext2D extends CanvasPathMethods {
    dot(x:number, y:number):void;
}

声明新的点方法;这足以让智能感知在CanvasRenderingContext2D的任何实例之后显示它。然而,这并不是一个完整的答案,因为我们不能转到点方法的实际定义(使用“转到定义”将只转到上述.d.ts文件,而不是代码实际所在的位置)。

即使我使用TypeScript而不是JavaScript重写整个项目,我仍然找不到一种方法来解决“转到定义”的问题。但是,我可以将声明尽可能地接近方法的实际代码,这样“转到定义”实际上就可以工作,即使在技术上不是这样。

票数 -1
EN

Stack Overflow用户

发布于 2018-08-03 05:59:43

你需要的是像这样使用一个自定义的@typedef:

代码语言:javascript
复制
/**
 * 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50898110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档