首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在编写IntelliSense时缺少Visual的IntelliSense

在编写IntelliSense时缺少Visual的IntelliSense
EN

Stack Overflow用户
提问于 2018-10-17 15:05:54
回答 2查看 677关注 0票数 2

我正在尝试学习JavaScript,并在Visual中编写一些示例。但是Intellisense在获取画布的上下文时不再为我工作。此示例在浏览器中呈现良好。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title>Canvas with text</title>
    <meta charset="utf-8" />
</head>
<body>
    <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;">
        Your browser does not support the HTML5 canvas tag.
    </canvas>
    <script>
        var c = document.getElementById("myCanvas");
        var ctx = c.getContext("2d");
        ctx.font = "30px Arial";
        ctx.fillText("Hello World", 10, 50);
    </script>
</body>
</html>

行:"var ctx = c.getContext("2d");“导致ctx得不到IntelliSense。因此,字体和fillText是我必须事先知道的属性和方法,而不是从Visual获得任何帮助。

这是正常还是我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-17 15:26:15

不幸的是,这是意料之中的。

Visual使用引擎盖下的类型记录来静态地分析您的代码,并猜测您使用的是什么类型,因此提供了intellisense。这不是一件容易的事情;JavaScript不是一种类型化的语言,坦白地说,VS很好地做到了这一点,这让人印象深刻。

但是,.getContext()函数可以返回几种不同的类型(https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext),而CanvasRenderingContext2D只是其中之一。虽然我们可以理解你的字符串'2d‘是一个常数,但tsc不能。

还有一些希望- VS也记得你在一个对象上做过的事情,所以一旦你使用了一些属性,它就会开始暗示那些东西(不过,坦白地说,如果你拼错了什么东西,那就像一把双刃剑!)

CanvasRenderingContext2D似乎没有构造函数(https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D),这意味着您无法向tsc提示您所希望的内容。恐怕这很常见。

我建议的唯一替代方案是直接使用TypeScript,或者考虑向项目中添加流,从而允许您使用JavaScript和注释类型(包括可以理解这些类型的vscode扩展)。

票数 1
EN

Stack Overflow用户

发布于 2020-06-28 20:59:57

最近在VSCode上遇到了这个问题。要使VSCode的intellisense将画布识别为JavaScript中的一个JavaScript,方法是在从DOM获取元素时使用内联类型定义注释:

代码语言:javascript
复制
const canvas = /** @type {HTMLCanvasElement} */ (document.getElementById('canvas'));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52858045

复制
相关文章

相似问题

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