14

私はしばらくの間、Visual Studio の JavaScript Intellisense 機能を使用しており、標準 API の提案がどれだけ適切に提供されているかにはほとんど満足していますが、Visual Studio に構成オブジェクト (つまり、複数のオプションを持つ単一のオブジェクト) を理解させることができないことがわかりました。または関数への引数として必要なプロパティ)。

公式のJSDoc 構文では、パラメーターにプロパティが必要な場合は、@paramそれぞれに別の行を作成し、ドット表記を使用することをお勧めします。

/**
 * @param {Object} config
 * @param {String} config.name
 * @param {Number} config.gold
 */
function do_it(config) { ... }

ただし、Visual Studio はこれを認識しませんconfig。 、config.name、およびconfig.goldを 3 つの個別の最上位パラメーターとしてレンダリングします。

do_it() は 3 つの個別のパラメーターを登録します

さらに悪いことに、メソッド本体内の AutoComplete 機能もパラメーターを認識せず、ましてやその型を認識しません。

config.name のメソッドにアクセスしようとすると、黄色の三角形が表示され、何の助けにもなりません。

Visual Studio でさらに近いと思われる唯一の解決策は、適切なドキュメント (@constructorおよび@propertyタグ) を使用して呼び出されないコンストラクター関数を記述することです。これにより、多くのデッド コードを記述し、JavaScript のクラスフリーの考え方 (そもそも構成オブジェクトを使用する理由)。構成オブジェクトを書くことすらできません!

それだけでなく、Visual Studio がそれを必要としないことも知っています。たとえば、このライブラリ関数idの呼び出しを書き出すと、引数オブジェクトに 、source、およびというプロパティが必要であることがわかりtarget、関数の引数のオブジェクト リテラルを作成したときにそれらの名前が提案されました。ドキュメントのおそらく、それらが使用されたという単純な事実から来ました:

Visual Studio は、これら 3 つのプロパティをドキュメント コメントなしで自動提案します。

確かに、これらのプロパティがオブジェクトになく、正しい型でない場合、メソッドは例外をスローしますが、それでも例外はありません。 編集:そして、最近、オブジェクトリテラルパラメーターを使用して、独自のコードで効果をある程度複製することができました-明確に定義されたオブジェクトを使用して1つの関数を呼び出し、コードの他の場所で関数を再度呼び出すと、Intellisense の提案が表示されました。しかし、関数本体内の型情報やセマンティック アクセスはまだありません。

Visual Studio は明らかに構成オブジェクトの概念を理解しており、提案されたプロパティを提供するためにいくつかのロジックを実行しています。そのアルゴリズムは何ですか?また、コードを壊さずに悪用するにはどうすればよいでしょうか?

4

1 に答える 1