Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как описать параметр с опциями в jsdoc чтобы google compiller не ругался (https://javascript.ru/forum/offtopic/37343-kak-opisat-parametr-s-opciyami-v-jsdoc-chtoby-google-compiller-ne-rugalsya.html)

megaupload 16.04.2013 15:03

Как описать параметр с опциями в jsdoc чтобы google compiller не ругался
 
function ololo (options){
    var trololo = options.trololo || [];
}


Number of warnings: 1

JSC_INEXISTENT_PROPERTY: Property trololo never defined on options at line 2 character 17
var trololo = options.trololo || [];



Написал сверху так, все ровно ругается

/**  @namespace options.trololo */

monolithed 16.04.2013 16:57

/** @param {Object} options */

kobezzza 16.04.2013 16:58

/**
 * @param {!Object} options
 * @param {Array} options.trololo
 */


https://developers.google.com/closur...s-for-compiler

monolithed 16.04.2013 17:56

@param {!Object} options

А что значит ! ?
JB это пропускает.

Можно еще так:

/** @param {*} options */
/** @param {Object | Array} options */
/** @param {Object} [options] */
/** @param {...*}  */


Или так:
/** @typedef {(Object | Array)} */
object.foo;

/** @param {object.foo} options */
object.bar = function(options) {
  ...
}

megaupload 16.04.2013 19:47

спасиб всем но это я знал)
ну а зачем тогда неймспейсы предлагают мне?
и зачем они вообще тогда нужны?

kobezzza 16.04.2013 21:18

Цитата:

Сообщение от monolithed (Сообщение 246522)
@param {!Object} options

А что значит ! ?
JB это пропускает.

В синтаксисе GCC JSDoc - это означает, что значение не может быть null, а указал я потому, что в GCC все объекты (кроме функций-колбеков) по умолчанию могут быть null и строчка
var trololo = options.trololo || [];
содержит потенциальную ошибку, т.к.
null.trololo
вызовет эксепшин.

Напротив, знак ? обозначает, что значение может быть null (для объектов можно не писать, т.к. они могут быть такими по умолчанию) и применяется как правило к элементарным типам: string, number и boolean (кстати следует заметить, что в GCC string != String и т.д. String означает явное создание объекта, а string использование примитива).

Кстати вебшторм понимает спецефичные GCC штуки, вроде ? ! и =

Цитата:

/** @param {Object | Array} options */
С точки зрения GCC эта конструкция ошибочна, т.к. обязательно нужно указывать круглые скобки при множественном типе данных:
/** @param {(Object | Array)} options */


А нужно это для того, что можно писать так:
/** @param {(Object | Array)=} options */

/** @param {Object=} options */ // Объект, может быть null и undefined

Знак = означает, что параметр опциональный.

Цитата:

и зачем они вообще тогда нужны?
Для GCC неймспейсы не нужны, они используются как пометки для докогенераторов и людей.

/** @namespace */
var URL = {
  getParam: function (){},
  ...
}

monolithed 16.04.2013 21:40

Цитата:

Сообщение от kobezzza
Для GCC неймспейсы не нужны, они используются как пометки для докогенераторов и людей.

Еще бывают ситуации когда JB не может найти свойство объекта и если ему не указать неймспес, то выражание может подсвечиваться как ошибочное.

Цитата:

Сообщение от kobezzza
В синтаксисе GCC JSDoc - это означает, что значение не может быть null, а указал я потому, что в GCC все объекты (кроме функций-колбеков) по умолчанию могут быть null и строчка

Хм. не внимательно читал доку )

kobezzza 16.04.2013 21:48

Цитата:

Сообщение от monolithed (Сообщение 246556)
Еще бывают ситуации когда JB не может найти свойство объекта и если ему не указать неймспес, то выражание может подсвечиваться как ошибочное.

К сожалению он (JB) часто глючит, например постоянно спотыкается на:
MyClass.prototype.length = function () {};

При вызове этого метода будет кричать что это свойсво, я по контролу указывать на Object.prototype.length или других стандартных, комменты не помогает. Также заметил, что ?boolean не корректно обрабатывается, а ?string или ?number ок. Но всё равно ребята молодцы что сделали такую поддержку.

megaupload 16.04.2013 22:27

Цитата:

Сообщение от kobezzza
К сожалению он (JB) часто глючит

о дааа

monolithed 16.04.2013 23:40

Цитата:

Сообщение от kobezzza
К сожалению он (JB) часто глючит, например постоянно спотыкается на:
MyClass.prototype.length = function () {};

Напомнило jQuery:

$.each({length: 1, 0: 1}, function(index, value) {
  console.log(value); // 1
});


Часовой пояс GMT +3, время: 17:57.