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, время: 21:08. |