弱类型脚本语言的代码提示功能一直是开发者一个隐隐的痛点,没有它也不是不能干活,但是经常因为出现拼写错误或不经意的修改导致的变量丢失而耗费无畏的时间在与业务逻辑无关的地方。VSCode的出现大有统一轻量级IDE领域之势,在其新版本中自带了JSDoc的解析功能,帮助JavaScript开发者通过书写注释的形式向IDE提供必要信息,完善提示功能。

先来看一个简单的例子(微信小程序前端代码)

export class CommonUtilsWX {

request(o, callback){

//TODO:xxxxx

}

}

可以看出该函数的定义中有一个object类型的参数o和一个函数型的回调参数callback。但是单纯从代码定义中IDE无法得知对象o中必须包含那些字段、callback回调函数中会带回哪些参数。对于JavaScript等弱类型脚本语言来说不到运行时阶段这些信息是没有意义的,而对于开发者而言,这些信息在一段时间以后很容易遗忘,更别说交付给第三方使用。所以这些信息就需要用JSDoc来书写出来。

export class CommonUtilsWX {

/**

* 发送网络请求,通信协议必须是http或https,数据协议必须是json

* @param {object} o 请求参数对象

* @param {string} o.host 请求url的域名,如http://xxx.xxx.com

* @param {string} o.path 请求url的路径,如xxx/xxx

* @param {object} o.query 请求url的查询段,根据对象中key,value拼成key1=value1&key2=value2的形式

* @param {string} o.method 请求方法,如GET,POST等

* @param {object} o.body 请求数据体,仅在method为POST时有效

* @param {function(Error):void} callback 请求回调,请求成功时error为空

*/

request(o, callback){

//TODO:xxxxx

}

}

可以看出JSDoc将参数o的类型和其必要的内部构造,函数类型的参数callback将会带回的参数类型Error和返回值类型void,等信息都被清晰明确的标记出来,同时附带了文字注释。

此时,直接使用new CommonUtilsWX()构造出来的对象调用request()方法可以看到如下的提示画面

然后再向request()函数传入字面量对象时,会看到如下的提示画面

下面是第二个例子,定义一个对象,并给对象中的字段赋予JSDoc类型信息

let zy = {

/**

* sdk版本号

* @type {number}

*/

version : 0.1,

/**

* 分享功能管理

* @type {Share|ShareWX}

*/

share: Share.createAdapter(),

/**

* 通用工具集,如网络请求,弹框显示等

* @type {CommonUtils}

*/

commonUtils : CommonUtils.createAdapter(),

/**

* 平台功能管理,如登录,用户信息等

* @type {Platform|PlatformWX}

*/

platform : Platform.createAdapter(),

/**

* 排行榜功能管理

* @type {Leaderboard}

*/

leaderboard : Leaderboard.createAdapter(),

/**

* 广告功能管理

* @type {Ad}

*/

ad : Ad.createAdapter(),

}

这里面除了用到@type关键字之外,还用到在{}中“|”符号的用法。这样的用法代表所标记的字段可能是多种类型的,尤其适用于我这段代码中的情况,即一个工厂方法可能会返回属于某个父类的任何子类对象,此时如果仅使用父类类型标记这个字段,则在使用时IDE无法提示出子类中的特殊方法,所以用了多种可能的类型标记后,IDE将会把所有可能类型中的提示信息都提示出来。此时的提示信息如下图

还有另外一种方法定义一个对象中每一个字段的类型和注释,而且可以复用,看上去更为专业,那就是@typedef关键字,下面就是用@typedef关键字重新书写的zy对象的JSDoc:

/**

* @typedef {object} ZY

* @property {number} version sdk版本号

* @property {Share|ShareWX} share 分享功能管理

* @property {CommonUtils} commonUtils 通用工具集,如网络请求,弹框显示等

* @property {Platform|PlatformWX} platform 平台功能管理,如登录,用户信息等

* @property {Leaderboard} leaderboard 排行榜功能管理

* @property {Ad} ad 广告功能管理

*/

/**

* @type {ZY}

*/

let zy = {}

上半部分是用@typedef关键字定义了一个全新的类型ZY,并且把类型中的每个字段都预先定义好。然后下半部分zy对象上方用JSDoc声这个对象的类型是ZY。这种用法适合用在可以复用的类型对象上,或者其内部字段没有全部出现在字面上,或者没有集中出现在一块区域时。

下面又出现了另一个问题,VSCode是根据文件模块的依赖关系来导入其他文件中的JSDoc的,比如A.js中require("B.js"),则B.js中的JSDoc信息就可以在A.js的JSDoc中使用,也能在A.js的代码提示中显示。但偶尔会遇到一些情况,从逻辑上A.js中并不需要

require("B.js"),而在编码中却需要使用B.js文件中的JSDoc。如果因为这种需求就额外的require("B.js"),就会破坏了代码正常的依赖关系。于是就出现了如下这种用法:

/**

* @typedef {import("B.js")} B

*/

这种方法相当于用JSDoc的方式引入的B.js文件,并将B.js中的模块定义为类型B。

JSDoc原本是一个为JavaScript生成文档的工具,其语法远比VSCode目前支持提示功能所用到的语法要多,有兴趣可以了解一下原生的JSDoc

http://www.css88.com/doc/jsdoc/

最后哔哔两句,入技术圈五六年来第一次发博,也是被很多资深博主的感化,发博一方面是分享自己技术方面的心得,分享过程中获得更多,一方面是提高自己书面表达能力。但入一个坑总得一步一步的入,所以先从可有可无的雕虫小技开始。

js函数提示 vscode_VSCode + JSDoc 完美实现(almost)JavaScript代码提示相关推荐

  1. python wx提示框字体_使用wxStyledTextCtrl实现代码提示

    wxStyledTextCtrl是wxPython对流行的Scintilla的包装,Scintilla的网站(http://www.scintilla.org/), wxStyledTextCtrl是 ...

  2. VS 2008的JavaScript代码提示功能 (学习老赵视频的笔记)

    学习老赵的视频ASP.NET AJAX深入浅出系列课程(19):VS 2008的JavaScript代码提示功能(Level 200) 自己做的demo,记下来以便查阅!感谢赵老师! 原来js还可以像 ...

  3. VSCode + JSDoc 完美实现(almost)JavaScript代码提示

    弱类型脚本语言的代码提示功能一直是开发者一个隐隐的痛点,没有它也不是不能干活,但是经常因为出现拼写错误或不经意的修改导致的变量丢失而耗费无畏的时间在与业务逻辑无关的地方.VSCode的出现大有统一轻量 ...

  4. html和js画圣诞树图片,教你如何把JavaScript代码写成圣诞树

    我们使用了自己写的一个nodejs库,如果您要实现这样的效果,只需要按照下面第一章节的方法即可.当然您也可以在线压缩代码: 下面分两章节,分别讲解如何使用js2image这个库 和 js2image这 ...

  5. js笔记十:vscode代码提示(20211221补充)

    对于开发过程中,如果有函数或属性提示,可以大大提高效率.对于java,python,C#等语言强类型的编译型脚本语言,其对应的IDE都有完备的代码.对于C++/C也有比较完善的代码提示,而js和lua ...

  6. 在网页中JS函数自动执行常用三种方法

    <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! al ...

  7. ide快捷键_一款好用的IDE怎么可以没有代码提示?

    我在使用过IntelliJ IDEA(一款Java开发工具)之后,感觉Delphi的IDE在编写代码方面尤其是代码提示方面和IntelliJ IDEA相比真的天差地别,所以决定认真的研究一下Delph ...

  8. html显示文件代码提示,代码提示和代码完成

    使用 Dreamweaver 的代码提示和代码完成功能,最大限度缩短编码时间. Dreamweaver 的智能代码完成或代码提示功能通过减少拼写和其他常见错误,使您可以快速插入和编辑代码. 您也可以使 ...

  9. 百度搜索_如何打开Intellij IDEA的代码提示功能?

    Intellij IDEA是一款优秀的编程软件,相比较Eclipse之下它的用户群较小,但并不代表它的功能就比Eclipse差,如果用顺手了还是特别好用的.代码提示功能对于程序员来说非常重要,那么我们 ...

最新文章

  1. 机器学习算法小结与收割offer遇到的问题
  2. 创建多线程_你真的了解多线程吗?
  3. SpringSecurity 案例之创建资源服务器准备工作
  4. python 目录 文件名_python目录与文件名操作
  5. 03 两个重要极限函数
  6. Sublime + Chrome 本地调试 CSS 选择器
  7. Gps经纬度转化关系
  8. 产生式系统 实验报告 人工智能原理实验
  9. 1068 万绿丛中一点红 Python实现
  10. 没牙仔的世界(C++)
  11. 格密码初步学习记录(三)SVP
  12. python数据分析:商品数据化运营(上)——知识点
  13. 任正非女儿孟晚舟成华为轮值董事长 公司年利润1137亿
  14. Mysql经典面试题(建议收藏)
  15. Wifi密码破解与局域网抓包监听(小白--纯工具版)
  16. java 图片水印_JAVA实现图片水印
  17. 微信视频号标题怎么写吸引眼球
  18. 【jenkins】jenkins旧版本下载
  19. NodeJS中模块和包
  20. 觉得算法难的看这里-算法动画图解的App算法宝开发历程分享

热门文章

  1. poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
  2. Oracle数据库的四种启动方式
  3. 剑指offer(C++)-JZ79:判断是不是平衡二叉树(数据结构-树)
  4. 华为机试HJ74:参数解析
  5. OpenCV-绘制旋转矩形
  6. linux nfs用的用户权限,权限 – Linux特定用户安装NFS
  7. 工作5年后我才发现:90%的技术问题,可以解决
  8. 一文带你用python做自动化测试
  9. python不能复制粘贴_你知道怎么使用python实现复制粘贴的功能吗?
  10. Win10家庭版之Docker ToolBox,Win10家庭版升级专业版