使用JavaScript进行类似Java的代码自动完成?

时间:2017-07-11 18:06:20

标签: javascript autocomplete webstorm

作为一名Java开发人员,我习惯于能够从IDE的代码完成中看到所有相关信息。以下是Eclipse IDE中代码自动完成的示例。例如,您可以看到函数contentEquals的返回类型是布尔值,它期望一个类型为StringBuffer的参数。另外,如果JavaDoc在那里,你甚至可以很好地解释该函数应该如何使用。

enter image description here

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

有人可以帮我搞清楚吗?

这是一个更具体的例子:

让我们说,您希望使用navigator.geolocation获取用户的位置。让我们假设您可以通过调用getCurrentPosition()方法来了解它。

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

navigator.geolocation.getCurrentPosition()

以下是Webstorm IDE的用法:

enter image description here

好的,它告诉我有一个强制性和一些可选参数来调用这个方法。让我们说,你想用只有强制参数来调用它,这个参数应该是一个函数。到目前为止这么好,但是有什么样的功能?这个函数应该带参数吗?它会返回什么吗?没有任何暗示。

我在网上的各种例子中发现,这个回调函数实际上确实需要一个参数,所以我继续写下来:

function printPosition(position) {
    // do something
}

但接下来的问题是:此参数position的类型是什么?你能用它做什么?

所以我尝试了代码自动完成: enter image description here

Whooot?它给了我各种各样的东西,但根本不是我想要的东西。所以我再次以谷歌结束。

这就是它应该是这样的样子:

console.log(position.coords.latitude + ' , ' + position.coords.longitude);

老实说,我从来没有想到这只是通过查看非常烦人的自动完成来完成的,因为我习惯在用Java编码时能够做到这一点。

任何人都可以与我的体验有关吗?我错过了什么吗?任何帮助将非常感谢!

3 个答案:

答案 0 :(得分:4)

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

您可以使用Google Closure AnnotationJSDoc3来实施这些评论。使用这些,您可以手动指定将为您提供自动完成的注释。

如果没有这些,WebStorm真的只是最好猜测它需要什么,而且通常无法猜测得太好(这就是为什么你在上一次截图中得到基本上所有内容的巨大列表)。

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

答案 1 :(得分:3)

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

您应该尝试 Typescript :来自 Microsoft Javascript编译器,这会增加强大的打字率(包括一个 C#类似的语法)。它还允许使用最新的ECMA实现编写代码。 它在编译时将一致的类型检查添加到 IDE

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

查看手册以了解语法的外观: https://www.typescriptlang.org/docs/handbook/advanced-types.html

限制:

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

最后一句话: VSCode 对于 Typescript 也是一个很好的 IDE ,不如 WebStorm < / strong>但是免费。

答案 2 :(得分:0)

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

enter image description here

尽管如此,它不如Java的基于IntelliJ / Eclipse的自动完成或C#.Net的基于VSTS的IntelliSense更好。但是,我们得到的建议数量有限,而不是数量众多的选择。

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