私はしばらくの間、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 つの個別の最上位パラメーターとしてレンダリングします。
さらに悪いことに、メソッド本体内の AutoComplete 機能もパラメーターを認識せず、ましてやその型を認識しません。
Visual Studio でさらに近いと思われる唯一の解決策は、適切なドキュメント (@constructor
および@property
タグ) を使用して呼び出されないコンストラクター関数を記述することです。これにより、多くのデッド コードを記述し、JavaScript のクラスフリーの考え方 (そもそも構成オブジェクトを使用する理由)。構成オブジェクトを書くことすらできません!
それだけでなく、Visual Studio がそれを必要としないことも知っています。たとえば、このライブラリ関数id
の呼び出しを書き出すと、引数オブジェクトに 、source
、およびというプロパティが必要であることがわかりtarget
、関数の引数のオブジェクト リテラルを作成したときにそれらの名前が提案されました。ドキュメントの。おそらく、それらが使用されたという単純な事実から来ました:
確かに、これらのプロパティがオブジェクトになく、正しい型でない場合、メソッドは例外をスローしますが、それでも例外はありません。
編集:そして、最近、オブジェクトリテラルパラメーターを使用して、独自のコードで効果をある程度複製することができました-明確に定義されたオブジェクトを使用して1つの関数を呼び出し、コードの他の場所で関数を再度呼び出すと、Intellisense の提案が表示されました。しかし、関数本体内の型情報やセマンティック アクセスはまだありません。
Visual Studio は明らかに構成オブジェクトの概念を理解しており、提案されたプロパティを提供するためにいくつかのロジックを実行しています。そのアルゴリズムは何ですか?また、コードを壊さずに悪用するにはどうすればよいでしょうか?