web-dev-qa-db-ja.com

JSDocの@param型としての列挙

JSDocの列挙型を使用することは可能ですか@param次の例のような型宣言ですか?

/**
 * @enum { Number }
 */
var TYPES = {
    TYPE_A: 1,
    TYPE_B: 2
}

/**
 * @param { TYPES } type
 */
function useTypesEnum( type ) {

}

JavaScriptにEclipseなどのIDEを使用している場合、警告は発生しませんか?

25
BuZZ-dEE

JsDocコメントはJavaScriptコードに影響を与えません。それが影響するのは、その情報を使用するように設計されたいくつかのツールです。 JsDocコメントを操作する2つのツールは documentation generator とGoogle Closure Compilerです。

@enumタグが追加されたJsDoc3には特に詳しくありませんが、他のタイプと同じように機能すると思います。

Closure Compilerはenumも正しく認識し、例で述べたようにそれを使用して、コンパイラーのすべての利点を得ることができます(型チェックなど)。

4
Tibos

これは警告なしにすべてを文書化する正しい方法だと思われます

/**
 * @typedef {number} MyType
 **/


/**
 * @enum {MyType}
 */
var TYPES = {
    TYPE_A: 1,
    TYPE_B: 2
}

/**
 * @param {MyType} type
 */
function useTypesEnum( type ) {

}

これの意味は:

  • MyTypeは数値です
  • TYPESはMyType値を保持する列挙型です
  • この関数は、MyType値を出力する列挙型を受け入れます

Intellij 2017.1で動作します

ただし、これにより、警告なしに各文字列を関数に渡すことができます。

列挙値も指定したい場合-別の文字列が使用された場合にエラーが発生するはずなので、以下で説明されている方法を使用してください https://stackoverflow.com/a/36501659/1068746

 /**
    * @typedef FieldType
    * @property {string} Text "text"
    * @property {string} Date "date"
    * @property {string} DateTime "datetime"
    * @property {string} Number "number"
    * @property {string} Currency "currency"
    * @property {string} CheckBox "checkbox"
    * @property {string} ComboBox "combobox"
    * @property {string} Dropdownlist "dropdownlist"
    * @property {string} Label "label"
    * @property {string} TextArea "textarea"
    * @property {string} JsonEditor "jsoneditor"
    * @property {string} NoteEditor "noteeditor"
    * @property {string} ScriptEditor "scripteditor"
    * @property {string} SqlEditor "sqleditor"
    */
26
guy mograbi

あなたはこれを行うことでそれを達成することができます:

/**
* @param {(1|2)} type
*/
function useTypesEnum(type) {

}

enter image description here

18
Ahmed Mahmoud