为VSCode/Monaco Intellisence添加JavaScript类型提示

gma*_*man 5 javascript intellisense visual-studio-code monaco-editor

有没有办法暗示VSCode/Monaco的intellisense变量类型.

我有一些像这样的代码

var loc = window.location;
var gl = context1.getContext("webgl");
var ctx = context2.getContext("2d");
Run Code Online (Sandbox Code Playgroud)

我看到VSCode知道这loc是一个URL

vscode知道loc

但它不知道什么gl

vscode不知道gl

它也不知道什么ctx

vscode不知道ctx

这是有道理的,让函数根据其输入返回不同的类型是一个有点不寻常的情况.

但它确实有类型数据 WebGLRenderingContext

vscode知道webglrenderingcontext

而且它知道 CanvasRenderingContext2D

vscode知道canvasrenderingcontext2d

有没有办法为我告诉vscode /摩纳哥即gl是实例WebGLRenderingContext,并且ctx是一个实例CanvasRenderingContext2D,而无需切换到打字稿?也许通过添加某种评论?

我需要解决方案在摩纳哥工作(至少在我的测试中显示所有相同的完成),因为这是一个WebGL教程站点,实际上不是VSCode,但我希望解决方案是相同的.

gma*_*man 12

更新:从摩纳哥的0.9.0开始,这些类型的注释现在可以使用了


是否看到JSDoc样式类型注释在VSCode中工作,尽管它们似乎在Monaco中不起作用.

var loc = window.location;

/** @type {WebGLRenderingContext} */
var gl = context1.getContext("webgl");    

/** @type {CanvasRenderingContext2D} */
var ctx = context2.getContext("2d"); 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述


Dan*_*ter 6

正如 Micah 在对已接受答案的评论中指出的那样,外部模块仍然可能存在问题。如果库定义了一个全局对象,您可以从中引用类型,那么只需对模块进行 require 操作就可以使 jsdoc 类型注释发挥作用。否则,您可以通过导入所有内容并将其映射到您自己的名称来模仿这一点。

import * as Foo from 'foo'

/** @type {Foo.Foo} */
var foo;
Run Code Online (Sandbox Code Playgroud)

https://github.com/Microsoft/TypeScript/issues/8237#issuecomment-213047062

  • 它也适用于函数参数 ```const foo = (/** @type {Foo.Bar} */bar) => {...};``` (2认同)