require と jsdoc を使用して JavaScript モジュールから列挙型をエクスポートするための正規のパターンを知りたいです。既存の例と質問は、ローカルのプライベート列挙型のみを考慮しているようです。私の目標は、可能な限り最高品質のドキュメントとインテリセンス/コード補完を用意することです。
これが私の現在の最善の試みです:
var LawnMower = function () {
};
/**
* Enums for the valid heights to mow
* @readonly
* @enum {number}
*/
LawnMower.heights = {
Low: 0,
Medium: 1,
High: 2
};
// Doing this separately from above, or Visual Studio's intellisense won't recognize it as an enum :-(
LawnMower.heights = Object.freeze(LawnMower.heights);
/*
* @param {LawnMower.heights} height - The height of the deck on the mower
*/
LawnMower.prototype.mow = function (height) {};
module.exports = LawnMower;
このアプローチに私を導いたいくつかの詳細があります:
- 高さは列挙型です。静的です。
- Object.freeze がベスト プラクティスのようです。
- LawnMower.heights = Object.freeze(...) を実行すると、Visual Studio のインテリセンスが機能しなくなります。したがって、私は2つのステップでそれを行います。
- @readonly を追加しましたが、何もしないと思います
- mow() 関数は LawnMower.height を参照しますが、どのツールもそれをあまり処理していないようです。
私たちのチームは、Visual Studio、Ace+Tern、および Atom を使用しています。上記のパターンで、次のようなコードを書くと:
var lm = new LawnMower();
lm.mow(
インテリセンスがパラメーター名、型、および説明を表示することを期待しています。「LawnMower.heights」を記入するとボーナスポイント。私たちのために。(Visual Studio は C# に対してこれを行います)。
結果:
- Atom はここで @param を完全に無視しているようです。
- Visual Studio は、引数が高さであることを通知しますが、型や説明は提供しません。
- Ace/Tern は高さの @jsdoc コメント行を表示します。
具体的な質問: @param 行を正しく書きましたか? 名前パス「LawnMower.heights」は、LawnMower の静的メンバーを参照する正しい方法だと思います。
参考文献: