Перевод аннотаций типа VJET в аннотации типа Closure

Vayt от EBay и Google Closure Compiler используют аннотации типов в комментариях Javascript.

Почему они выбрали несовместимые синтаксисы?

VJET

function add(a, b) {  //< Number add(Number, Number)
    return a + b ;
}

Google Closure

/**
 * Queries a Baz for items.
 * @param {number} groupNum Subgroup id to query.
 * @param {string|number|null} term An itemName,
 *     or itemId, or null to search everything.
 */
goog.Baz.prototype.query = function(groupNum, term) {
  ...
};

Есть ли способ автоматически превращать аннотации типа VJET в аннотации типа Google Closure?

1 ответ

Решение

Не существует автоматического способа перевести vjetdocs в jsdocs, но здесь приведен ручной перевод API запросов. Сначала я переведу с jsdoc у замыкания на vjetdoc, а затем вернусь, чтобы показать различия.

/**
 * Queries a Baz for items.
 * @param {number} groupNum Subgroup id to query.
 * @param {string|number|null} term An itemName,
 *     or itemId, or null to search everything.
 */

groupNum в VJET doc - это первая первая позиция, а типом будет Number (не number), vjet использует чувствительное к регистру имя стандартного типа EcmaScript.

itemName is VJET doc будет смешанным типом, который может быть Number или String. В настоящее время в VJETDoc нет типа по умолчанию с именем Null. Если бы существовал тип данных Null, это был бы верхний регистр. Я считаю, что это должно быть добавлено в VJET, но можно передать значение null, и VJET не будет жаловаться на приведенные ниже объявления.

Вы можете написать это в vjetdoc с именами функций и параметров или без них (если вы не хотите повторяться... позиция занимает место.

// shortest form
function query(groupNum, itemName) {  //< void (Number, {String|Number}?)

}
//
// longer form - on same line as declaration
function query(groupNum, itemName) {  //< void query(Number groupNum, {String|Number}? itemName)

}

// longer form mixed with jsdocs

/**> void query(Number groupNum, {String|Number}? itemName);
 * 
 * Queries a Baz for items.
 * @param {number} groupNum Subgroup id to query.
 * @param {string|number|null} term An itemName,
 *     or itemId, or null to search everything.
*/
function query(groupNum, itemName) {  

}


query(10,"test");
query(30,20);
query(20,null);
Другие вопросы по тегам