Webstormで大量の未解決の変数警告と戦う方法は?


110

サーバーからデータを取得する関数があります。

function getData(data){
    console.log(data.someVar);
}

Webstormは言うsomeVar-は未解決の変数です。このような警告を取り除くにはどうすればよいですか?

いくつかのオプションが表示されます:

  • IDE設定で警告を抑制します。
  • フィールドを含むjsonソースファイル(詳細)を追加します。
  • 配列のような構文を使用しますdata['some_unres_var']

また、Webstormは、「データ」の名前空間を作成する(のような注釈を追加する/** @namespace data.some_unres_var*/)、そのようなフィールドを作成する、または名前を変更するように私に提案しています。


2
@hellboyクイックアンサー:右クリック-> JavaScriptライブラリを使用-> HTMLがチェックされていることを確認してください。何が起こっているのかをよりよく理解するために、プロジェクト設定で利用可能なjavascriptライブラリを見てこれをフォローアップしてください。
オーウェンスマーティン2014

回答:


102

JSDocを使用します。

/**
 * @param {{some_unres_var:string}} data
 */
function getData(data){
    console.log(data.some_unres_var);
}

8
変数の場合、この構文を使用します/** * @type {Object} * @property {string} sortval - value to sort by */ var a;
Ferenc Takacs

3
関数がanonymouns関数である場合、どのようにしますか?........ .then(function(data){....})のように
David V.

1
グローバル変数を定義する同様の方法はありますか?私は自分のWebアプリで外部ライブラリを参照しています。などを使用する必要がありますMediumEditorが、intellijは悪名高い未解決の変数の警告を表示します。
borislemke 2017

@borislemke:この答えは、パラメーターではない変数に対しては機能しません。一般的な解決策は@namespace使用することです。
Dan Dascalescu

45

JSDocオブジェクト。その後、そのメンバー。

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property ローカル変数用(非パラメーター)
  • PyCharmでテストされています。@Nicholiは、Webstormで動作することを確認しています。
  • {{ member:type }}構文アンドレアスは、Djangoのテンプレートと競合する可能性が示唆されました。
  • @param wikiを引用しているJonny Buchananの回答に感謝します

オブジェクトの配列を文書化するには[]JSDocが示唆するようにブラケットを使用します。

/**
 * @param data
 * @param data.array_member[].foo
 */

パラメータではない変数はどうですか?一般的な解決策は@namespace使用することです。
Dan Dascalescu

1
WebStormで動作する複雑なオブジェクトのこの表記を確認できます。
Nicholi 2017

18

他のすべての回答は、一般的なケースでは正しくありません。dataパラメータとして取得しない場合はどうなりますか?あなたはJSDocを持っていません:

function niceApiCall(parameters) {
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}

WebStormは、「result.entries」が未解決の変数(フィールド)であることを警告します。

一般的な解決策は、@namespace宣言を追加することです。

function niceApiCall(parameters) {
  /** @namespace result.entries **/
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}

2
この解決策をありがとう。私はAPIから返された多くの属性を持っているので、私がこのようなエラーを回避するには、多くの属性をリストする必要があると思います: `` `/ ** @namespace req.headers.signaturecertchainurl / / @名前空間req.headers.signature / / @namespace req.headers.slots / / @namespace req.headers.nutrientslot ** / `` `より高いレベルの名前空間(例req.headers)を作成し、それに自動的に子を割り当てる方法はありますか?(コメントに書式を設定していないため申し訳ありません!)
James

@ジェームズ:それは良い質問です。また、少なくとも1行あたりのフィールドより多くのものをリストすることを(成功せずに)探しました。
Dan Dascalescu

6

http://devnet.jetbrains.com/message/5366907に記述されているように、jsonリテラルを返す匿名関数式を含むダミーのjsファイルを使用することで解決できる場合があります。また、このjson値を保持する偽の変数を作成し、この変数を@paramアノテーションの値として使用して、WebStormに実際のタイプが何であるかを知らせることもできます。お気に入り:

var jsontext = {"some_unres_var":"val"};
/** @param {jsontext} data */
function getData(data){
    console.log(data.some_unres_var);
}

http://devnet.jetbrains.com/message/5504337#5504337も参照してください


1
JetBrainsフォーラムでのエレナの提案は、奇妙な解決策です。一般的な解決策は@namespace使用することです。
Dan Dascalescu


-1

WebStorm IDEの警告を削除するには、次の検査オプションをオフにします。

  • 未解決のJavaScript関数
  • 未解決のJavaScript変数

PS。これによりIDEの警告は削除されますが、WebストームのようなIDEで最高のユーティリティの1つが失われ、コードの品質が低下する可能性があるため、これは最良の考えではありません。

それでも、メニューをたどる場合は、[ファイル] > [ 設定] > [ エディター] > [ 検査]の順に選択して、Javascript警告を無効にすることができます。

次の画像のように:

オプションのチェックを外します


JSを編集するためにIDEを使用することの多くの有用性がなくなるため、これは悪い考えです。ポイントは、JavaScriptドット表記を使用すると検査が混乱することであり、検査を無効にする必要があるということではありません。
ウィルハリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.