Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2013, 15:03
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Как описать параметр с опциями в 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 */
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2013, 16:57
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

/** @param {Object} options */
Ответить с цитированием
  #3 (permalink)  
Старый 16.04.2013, 16:58
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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


https://developers.google.com/closur...s-for-compiler
__________________
kobezzza
code monkey
Ответить с цитированием
  #4 (permalink)  
Старый 16.04.2013, 17:56
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

@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) {
  ...
}

Последний раз редактировалось monolithed, 16.04.2013 в 18:14.
Ответить с цитированием
  #5 (permalink)  
Старый 16.04.2013, 19:47
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

спасиб всем но это я знал)
ну а зачем тогда неймспейсы предлагают мне?
и зачем они вообще тогда нужны?
Ответить с цитированием
  #6 (permalink)  
Старый 16.04.2013, 21:18
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от monolithed Посмотреть сообщение
@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 (){},
  ...
}
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 16.04.2013 в 21:26.
Ответить с цитированием
  #7 (permalink)  
Старый 16.04.2013, 21:40
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

Сообщение от kobezzza
В синтаксисе GCC JSDoc - это означает, что значение не может быть null, а указал я потому, что в GCC все объекты (кроме функций-колбеков) по умолчанию могут быть null и строчка
Хм. не внимательно читал доку )
Ответить с цитированием
  #8 (permalink)  
Старый 16.04.2013, 21:48
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от monolithed Посмотреть сообщение
Еще бывают ситуации когда JB не может найти свойство объекта и если ему не указать неймспес, то выражание может подсвечиваться как ошибочное.
К сожалению он (JB) часто глючит, например постоянно спотыкается на:
MyClass.prototype.length = function () {};

При вызове этого метода будет кричать что это свойсво, я по контролу указывать на Object.prototype.length или других стандартных, комменты не помогает. Также заметил, что ?boolean не корректно обрабатывается, а ?string или ?number ок. Но всё равно ребята молодцы что сделали такую поддержку.
__________________
kobezzza
code monkey
Ответить с цитированием
  #9 (permalink)  
Старый 16.04.2013, 22:27
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Сообщение от kobezzza
К сожалению он (JB) часто глючит
о дааа
Ответить с цитированием
  #10 (permalink)  
Старый 16.04.2013, 23:40
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

$.each({length: 1, 0: 1}, function(index, value) {
  console.log(value); // 1
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск