使用JavaScript实现类Java代码自动完成?

使用JavaScript实现类Java代码自动完成?,javascript,autocomplete,webstorm,Javascript,Autocomplete,Webstorm,作为一名Java开发人员,我已经习惯于能够看到IDE代码完成之外的所有相关信息。下面是一个来自EclipseIDE的代码自动完成示例。例如,您可以看到函数contentEquals的返回类型是一个布尔值,它需要一个类型为StringBuffer的参数。此外,如果有JavaDoc,您甚至可以很好地解释函数应该如何使用 现在,我正在寻找使用JavaScript编码时类似的东西。 我开始使用Webstorm是因为我想要一个具有更高级特性的IDE,但当您看到代码自动完成时,它可能看起来很差,或者我没有

作为一名Java开发人员,我已经习惯于能够看到IDE代码完成之外的所有相关信息。下面是一个来自EclipseIDE的代码自动完成示例。例如,您可以看到函数
contentEquals
的返回类型是一个布尔值,它需要一个类型为
StringBuffer
的参数。此外,如果有JavaDoc,您甚至可以很好地解释函数应该如何使用

现在,我正在寻找使用JavaScript编码时类似的东西。 我开始使用Webstorm是因为我想要一个具有更高级特性的IDE,但当您看到代码自动完成时,它可能看起来很差,或者我没有正确使用它

有人能帮我弄清楚吗

下面是一个更具体的例子:

比方说,您希望通过使用navigator.geolocation获取用户的位置。让我们假设您知道通过调用getCurrentPosition()方法可以做到这一点

您可以继续输入IDE(在我的例子中是Webstorm):

以下是Webstorm IDE的功能:

好的,它告诉我有一个强制参数和两个可选参数来调用这个方法。比方说,您只想使用强制参数调用它,该参数应该是一个函数。到目前为止还不错,但是什么样的功能呢?这个函数应该接受参数吗?它还回什么吗?没有任何暗示

我在web上的各种示例中发现,这个回调函数实际上只包含一个参数,因此我继续编写它:

function printPosition(position) {
    // do something
}
但接下来的问题是:这个参数是什么类型的?你能用它做什么

所以我在上面尝试代码自动完成:

哇?它给了我各种各样的东西,但根本不是我想要的。所以我又回到了谷歌

这里是它的样子:

console.log(position.coords.latitude + ' , ' + position.coords.longitude);
老实说,我从来没有想到,仅仅通过查看自动完成就可以做到这一点,这非常烦人,因为我习惯于在Java中编写代码时能够做到这一点


有人能说出我的经历吗?我错过什么了吗?任何帮助都将不胜感激

简而言之,因为JavaScript不像Java那样是强类型语言,所以您无法像Java那样获得超粒度的自动完成,除非开发人员包含WebStorm(或任何IDE)可以解释的注释

您可以使用或实现这些注释。使用这些注释,您可以手动指定注释,从而实现自动完成

如果没有这些,WebStorm实际上只是尽最大努力猜测它需要什么,而且它通常不能猜得太好(这就是为什么你在上一张截图中得到了基本上所有内容的巨大列表)


使用JavaScript,您只需依赖文档。

JavaScript是一种动态的弱类型语言:类型是松散的,可以在运行时更改,因此,IDE无法提供准确的完成,除非它可以在代码文档的形式下找到提示()

您应该尝试一下:这是一个来自Microsoft的Javascript编译器,它添加了强类型(使用类似于C的语法)。它还允许使用最新的实现编写代码。 它在IDE中添加了compilation+时的一致类型检查

换句话说,这是一种编写现代Javascript的方法(支持类、生成器、扩展运算符等),以及键入(类型、泛型、接口)和一些类型脚本特定功能(考虑到微软对这些规范的影响,这些规范可能会进入下一个ECMA版本)。
这就是Typescript编译器,它关心将所有这些代码转换为纯向后兼容的Javascript代码,这些代码可以在较旧的浏览器/平台上运行

请参阅手册,了解语法的外观:

限制:

  • 它意味着一个中间编译步骤,例如文件修改。可能需要为此做一些设置,根据您的需要或多或少地简单(如果在本地环境中工作,支持Typescript的IDE可以自己查看和编译文件,有时嵌入Typescript,使其透明)
  • 目前,类型和接口只存在于编译时,而不存在于生成的Javascript代码中。因此,自反性/内省受到限制
  • 当使用外部库(例如NPM包)时,只有在处理相关的Typescript声明文件时,才能完成

最后一句话:也是Typescript的一个很好的IDE,没有WebStorm那么详尽,但是免费。

在用JS编写自动化代码时,我也面临类似的问题。 我发现,使用像Visual Studio代码这样的轻量级编辑器,我可以获得数量有限的自动完成建议

尽管它不如基于IntelliJ/Eclipse的auto complete for Java或基于VSTS的IntelliSense for C#.Net那么好,但它几乎没有无数的选项,我们得到的建议数量有限


此外,我还发现使用TypeScript的体验有了很大的改善。

我不是有意回避您的问题,但我邀请您尝试一下Visual Studio代码。对所有JavaScript、TypeScript和NodeJS的出色支持(主要是通过称为“打字”的东西,您可以阅读更多内容以及插件)。它也是完全免费的。
console.log(position.coords.latitude + ' , ' + position.coords.longitude);