vscode的智能提示规律是怎么样的?怎么加强有用的智能提示屏蔽没用的代码提示?这篇文章将一一解答。
java
1.智能提示与代码跳转 c++
将鼠标悬停在代码处,凡是能出现智能提示的地方,都能经过 ctrl + 鼠标左键 的方式跳转到它的定义处,若是有多个定义,则会让你选择跳转到哪里。
api
悬停显示:
微信
ctrl + 鼠标左键,代码跳转:函数
2.哪些代码会提示,哪些会屏蔽
ui
对于同一个文件的代码来讲,全部代码逻辑能访问到的代码均可以得到智能提示。
spa
依次获取函数内变量,类里面的函数,文件里面的变量,这3者从代码逻辑来讲都能获取,因此也能显示对应的智能提示。反之,代码逻辑不能获取的不只没有智能提示,并且会报错:
.net
onLoad函数里面访问不到函数 newJourney里面的局部变量 b,因此报错。插件
不一样文件间的智能提示是怎么样的呢?code
1.若是一个文件里面没有 import,require,export,export default等导入导出语句,那么这个文件就会被当作全局文件对待,它的全部顶层数据都会暴露给其余文件,其余文件能获取它的全部顶层数据的智能提示,可是逻辑上不必定能直接访问(这是一个须要特别注意的点,后面会说明)。如:
在其余任意文件能够直接获取上面数据的智能提示:
对于有 import,require,export,export default 等导入导出语句的文件,他们会被当作模块,此时只有 export,export default 的那些数据会被外部访问到,并且vscode会帮你自动写import导入语句,如:
上面文件只有Home类能被外部访问到:
访问Home.ts文件里面的顶层数据test会报错。
总结起来就是一句话:有导入导出语句的文件,只有导出部分能暴露给外面访问,没有导入导出的普通文件,全部定义的顶层数据都能被外面访问而得到智能提示。
注意点:对于没有导入导出语句的普通文件,这里的能被访问只是表现层面的能够访问(也就是能获取它的智能提示),逻辑层面其实并不能。因此为了达到表现和逻辑的统一,能够经过window这个全局对象来处理。以下,怎么简洁优雅的写一个全局单例模块用于封装通用api:
上述文件1处定义了一个单例对象GNum,GNum是一个顶层数据,根据上面的分析,其余文件能够获取GNum的智能提示。当咱们在其余文件输入GNum的时候能够得到这个对象及其下面全部公有函数和属性的智能提示,之因此用 new class 这种匿名类的写法是不想额外暴露一个咱们不必暴露的类名给外面。
这个时候其余文件就能够获取GNum的智能提示了,可是逻辑上GNum并非全局的,怎么把智能提示的表现和逻辑统一呢?请看关键的一句2,2处定义了一个window下面的属性“GNum”指向GNum,此时当咱们在一个文件里面输入GNum的时候,智能提示实际上是1处的,可是逻辑用的又是window下面的“GNum”,“GNum”指向1处的GNum, 因此这样就作到了逻辑和表现的统一了,以下:
运行结果:
这样写出来的全局模块,简洁优雅,智能提示充足,其余任意文件能够直接调用api而不须要写各类import语句,就像调用cc.xxx这样的引擎api同样天然。
tips:其实cc的api也是用了一个 creator.d.ts来达到表现和逻辑的统一。逻辑是在引擎代码里面实现的,而咱们看到的智能提示则是 creator.d.ts 这个文件,ctrl + 左键 也会跳转到这里。
根据上面的分析,若是你在 creator.d.ts 里面加一个import或者export语句,你其余文件就不能直接获取不到cc的智能提示了,之前写的cc.xx代码会报错,可是并不影响运行,由于cc的逻辑在引擎代码里面,读者能够本身尝试。
像这种实现和声明分离的作法通常用于第三方js插件什么的,如protobufjs.js,引入工程后,逻辑有了,你直接调用里面的api,虽然会提示代码错误,可是逻辑并不会有问题,运行不报错。这个时候就能够经过写对应的.d.ts文件来补足它的智能提示,达到表现和逻辑统一的效果。
对于咱们本身的工程文件,模块文件来讲,仍是推荐用上面的 GNum的写法,实现逻辑和智能提示写在一块儿,既有充分的智能提示,又不须要写额外的.d.ts,这才是脚本语言的魅力(比java,c++简洁,灵活)。
3.智能提示的写法
jsdoc注释(/** */)写法的智能提示能够被很好的展现,普通的注释(//)则没有这个功能,因此为了获取良好的智能提示效果,尽量的写 jsdoc注释(/** */)吧。jsdoc注释的写法读者能够自行百度,这里就不展开说了。
本文分享自微信公众号 - 一枚小工(caizj_cn)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。