GCC - трюки/вопросы
Давайте в этом треде писать вопросы/трюки и т.д. при работе с GCC.
Вопрос: Как декларировать перегрузку параметров метода при переопределении метода в дочернем объекте. Решение: Это конечно хак, но работает: /** @constructor */ function Foo() {} /** * @param {string} a * @param {...?} args * @return {string} */ Foo.prototype.get = function (a, args) { return ''; } /** * @constructor * @extends {Foo} */ function Foo2() {} /** * @override * @param {number} b */ Foo2.prototype.get = function (a, b, e) { return ''; } Т.е. в родительском классе мы закладываем декларацию о возможном расширении @param {...?} args Мб есть более правильный способ? |
kobezzza, по-моему, всё верно. или я не понял :)
хм. я вижу, что там обновилась статья о JSDOC внутри GCC. Что думаете насчёт того, чтобы дополнить статьи на сайте? |
Цитата:
Цитата:
|
Цитата:
там какие-то шаблоны типов; структуры - походу из C принесли в GCC. нипанятна |
Цитата:
Цитата:
|
|
Недавно придумал очень классный трюк, который позволяет декларировать конвертацию типов для GCC.
Заведём функцию ковертор: /** * Вернуть заданный объект с указанием произвольного типа * (для приведения типа в GCC) * * @param {?} val - исходное значение * @return {?} */ function Any(val) { return val; } Теперь допустим у нас есть функция: /** * @param {(string|!Array)} idOrParams */ function get(idOrParams) { if (Array.isArray(idOrParams)) { return idOrParams.map(...); // Тут GCC начнёт варнить, мол тип может быть строкой и данный код не безопасен } } Решение номер 1 Сделаем явную конвертацию данных: /** * @param {(string|!Array)} idOrParams */ function get(idOrParams) { if (Array.isArray(idOrParams)) { return [].concat(idOrParams).map(...); } } Работает, но выглядит как кривой хак (а вот для конвертаций в примитивы можно спокойно юзать Boolean, String и Number). Решение номер 2 Использование конвертора Any /** * @param {(string|!Array)} idOrParams */ function get(idOrParams) { if (Array.isArray(idOrParams)) { /** @type {!Array} */ var myArray = Any(idOrParams); return myArray .map(...); } } Функцию Any GCC грохнет при компиляции и никаких оверхедов не будет, данный трюк можно использовать для любой кновертации данных, также можно наплодить на основе Any ряд функций, навроде: isArray и т.д. |
есть ли веские прчины использовать экстримальное сжатие gcc изрщряясь с jsdoc и кодом? сжатие на дополнительных 30 киллобайт вполне компенсируется gzip. или я что то не так говорю? ДАЖЕ СРАНУЮ КАРТИНКУ сожми чуть сильнее, и вот тебе окупилось отсутсивие gcc
|
Цитата:
ну а юзать - имхо, UglifyJS2 в руки и нормас. он (углифи) и работает быстрее |
Цитата:
|
Часовой пояс GMT +3, время: 02:34. |