簡體   English   中英

使用 JavaScript 自動完成類 Java 代碼?

[英]Java-like code autocompletion with JavaScript?

作為一名 Java 開發人員,我已經習慣於能夠從 IDE 的代碼完成中看到所有相關信息。 下面是一個來自 Eclipse IDE 的代碼自動完成示例。 例如,您可以看到函數contentEquals的返回類型是一個布爾值,它需要一個類型為StringBuffer參數。 此外,如果有 JavaDoc,您甚至可以很好地解釋應該如何使用該函數。

在此處輸入圖片說明

現在我在用 JavaScript 編碼時正在尋找類似的東西。 我開始使用 Webstorm 是因為我想要一個具有更高級功能的 IDE,但是當您查看代碼自動完成功能時,它要么看起來很糟糕,要么我沒有正確使用它。

有人可以幫我弄清楚嗎?

下面是一個更具體的例子:

假設您想通過使用 navigator.geolocation 獲取用戶的位置。 假設您知道通過調用 getCurrentPosition() 方法可以完成的工作。

你繼續輸入你的IDE(在我的例子中是Webstorm):

navigator.geolocation.getCurrentPosition()

以下是 Webstorm IDE 的內容:

在此處輸入圖片說明

好的,它告訴我有一個強制參數和幾個可選參數來調用這個方法。 比方說,您只想使用強制參數來調用它,該參數應該是一個函數。 到目前為止一切順利,但什么樣的功能呢? 這個函數應該帶參數嗎? 它會返回任何東西嗎? 沒有任何提示。

我在網上的各種例子中發現,這個回調函數實際上只帶一個參數,所以我繼續寫它:

function printPosition(position) {
    // do something
}

但是下一個問題來了:這個參數position是什么類型? 你能用它做什么?

所以我嘗試代碼自動完成: 在此處輸入圖片說明

嗬嗬? 它給了我各種各樣的東西,但根本不是我正在尋找的東西。 所以我再次以谷歌結束。

這是它應該是什么樣子:

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

老實說,我從來沒有想到這是通過查看自動完成來完成的,這很煩人,因為我習慣於在 Java 中編碼時能夠做到這一點。

任何人都可以與我所經歷的有關嗎? 我錯過了什么嗎? 任何幫助將不勝感激!

簡而言之,因為 JavaScript 不是像 Java 那樣的強類型語言,所以您無法像在 Java 中那樣獲得超細粒度的自動完成功能,除非開發人員已包含 WebStorm(或任何 IDE)可以解釋的注釋。

您可以使用Google Closure AnnotationJSDoc3來實現這些注釋。 使用這些,您可以手動指定可以自動完成的注釋。

但是,如果沒有這些,WebStorm 確實只是盡力猜測它需要什么,而且它通常無法很好地猜測(這就是為什么您會在上一個屏幕截圖中獲得包含基本所有內容的龐大列表的原因)。

使用 JavaScript,您只需要依賴文檔。

Javascript是一種動態的類型語言:類型是松散的,可以在運行時更改,因此IDE無法提供准確的補全,除非它可以在代碼文檔( JSDoc )的形式下找到提示。

您應該嘗試一下Typescript :這是來自MicrosoftJavascript 編譯器,它添加了強類型(使用類似C#的語法)。 它還允許使用最新的ECMA實現編寫代碼。 它在編譯時將一致的類型檢查添加到IDE 中

換句話說,這是一種編寫現代Javascript 的方法(在類、生成器、擴展運算符等的支持下),以及類型(類型、泛型、接口)和一些Typescript特定功能(可能會使其成為考慮到微軟對這些規范的影響,進入下一個ECMA版本)。
這就是Typescript編譯器,它負責將所有這些代碼轉換為純且向后兼容的Javascript代碼,可以在較舊的瀏覽器/平台上運行。

查看手冊以了解語法的外觀: https : //www.typescriptlang.org/docs/handbook/advanced-types.html

限制:

  • 它意味着一個中間編譯步驟,例如文件修改。 可能有一些設置要做,根據您的需要或多或少簡單(如果在本地環境中工作,支持Typescript 的 IDE可以自己查看和編譯文件,有時還嵌入Typescript ,使其透明)
  • 目前,類型和接口僅存在於編譯時,而不存在於生成的Javascript代碼中。 因此,反思/內省是有限的
  • 當使用外部庫(例如NPM包)時,只有當您擁有相關的Typescript聲明文件時,您才能完成

和最后一句話: VSCode也是打字稿好的IDE,WebStorm但自由更少無遺。

我在用 JS 編寫自動化代碼時也面臨類似的問題。 我發現 - 使用像 Visual Studio Code 這樣的輕量級編輯器,我可以獲得有限數量的自動完成建議。

在此處輸入圖片說明

雖然它不如基於 IntelliJ/Eclipse 的 Java 自動完成或基於 VSTS 的 IntelliSense for C#.Net 好。 但是,它仍然接近,因為我們得到的建議數量有限,而不是無數的選擇。

此外,我發現使用 TypeScript 體驗得到了很大改善。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM