Рубрики
Без рубрики

Сила jsdoc

Как бороться с страшным JavaScript слабым типом.

Автор оригинала: Guillaume Martigny.

Многие разработчики жалуются на слабое набрав JavaScript (по причинам). Вот почему мы видели подъемники. Но в качестве аккуратного, как есть, Tybrescript поставляется с некоторыми предостережениями.

  • Трудно печатать
  • Ваш код анализируется и изменен
  • Дополнительный шаг для построения
  • Новый синтаксис для изучения

Большую часть времени их легко иметь дело или просто игнорировать. Где jsdoc действительно хорош, состоит в том, что он уменьшает боль слабого типа без каких-либо недостатков и даже добавить к столу.

Что это

Во-первых, давайте посмотрим сложный пример, который мы собираемся реконструировать вдоль этого урока.

/**
 * Nice little equine animal
 * @class
 * @extends Animal
 */
class Pony extends Animal {
    /**
     * Pony constructor
     * @param {String} name - This pony's name
     * @param {String} [color=Pony.colors.white] - This pony's color
     */
    constructor (name, color = Pony.colors.white) {
        super(name);
        this.color = color;
        /**
         * This pony's age
         * @type {Number}
         */
        this.age = 0;
    }

    /**
     * Make it run
     * @param {...String} through - Any number of field to run through
     * @example instance.run("field", "land");
     * @return {Pony} Itself
     */
    run (...through) {
        console.log("Run through ", ...through);
        return this;
    }

    /**
     * @typedef {Object} PonyColors
     * @prop {String} white - Pure light color
     * @prop {String} black - Dark color
     * @prop {String} foxy - Reddish color
     */
    /**
     * Get possible pony's colors
     * @static
     * @return {PonyColors}
     */
    static get colors () {
        return {
            white: "#fff",
            black: "#333",
            foxy: "#c57432",
        };
    }
}

И вот демонстрация преимуществ (с использованием веб-таблицы). Посмотрите внимательно на автозаполненные всплывающие подсказки.

Анимированная демография

Теперь давайте пройдемся через это шаг за шагом.

Описание

Самое простое использование jsdoc – описать функцию или класс.

/**
 * Nice little equine animal
 */
class Pony extends Animal {
    /**
     * Pony constructor
     */
    constructor (name, color = Pony.colors.white) {
        // ...
    }

    /**
     * Make it run
     */
    run (...through) {
        // ...
    }

    /**
     * Get possible pony's colors
     */
    static get colors () {
        // ...
    }
}

Теперь любой, кто использует код, который вы написали, будет иметь некоторую информацию с целью каждой функции или классов. В зависимости от вашего IDE или редактора, он будет показан в подсказке при поддержке автозаполнения.

Параметры

Во введении я говорил о типах переменных в JS. Вот где мы решаем проблему. JSDOC позволяет вам указать, какие параметры с помощью чего тип (или типы) ожидают функцией. Затем ваша среда разработки должна предупредить вас, если вы дадите параметр с несовместимым типом.

/**
 * Pony constructor
 * @param {String} name - A string
 * @param {String|Number} color - A string or a number
 */
constructor (name, color = Pony.colors.white) {
    // ...
}

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

/**
 * Pony constructor
 * @param {String} name - This pony's name
 * @param {String} [color=Pony.colors.white] - This pony's color
 */
constructor (name, color = Pony.colors.white) {
    // ...
}

Мы снова можем видеть эффект, на автозаполнении.

Тип параметров Demo.

Тип/Определение обратного вызова

Иногда вам может потребоваться определить пользовательские типы для описания некоторых данных, которые вы не хотите обернуть в классе.

/**
 * @typedef {Object} PonyColors
 * @prop {String} white - Pure light color
 * @prop {String} black - Dark color
 * @prop {String} foxy - Reddish color
 */

Таким образом, вы можете прикрепить тип и описание каждому элементу объекта.

Тип определения демонстрации

То же самое верно для ожидаемого параметра, рассмотрим следующее:

/**
 * @typedef {Object} CustomData
 * @prop {String} name - Cute name for you pony
 * @prop {String} [color=Pony.colors.white] - Color of its fur
 * @prop {Number} [age=0] - Years since its birth
 */
/**
 * Create a pony
 * @param {CustomData} data
 * @return Pony
 */
function ponyFactory (data) {
    // ...
}

CustomData Тип объясняется в блоке @typedef. Тип определения может событие продлевает другие с тегом @extends. Это действительно круто 8)

Если функция ожидает обратного вызова (например, типичный массив, например), вы можете показать, какие параметры будут переданы на этот обратный вызов.

/**
 * @callback PonyCallback
 * @param {Pony} pony - A pony
 * @param {Number} index - Index of the pony
 * @param {Array} list - List of all the ponies
 */
/**
 * Execute a function on each created pony
 * @param {PonyCallback} callback - Function called on each pony
 */
function herd (callback) {
    // ...
}

Дальше и дальше

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

Почетный упоминание @return (определите возвращенный тип), @Abstract (этот класс не должен быть мстительным), @Type (укажите тип для любой переменной), @example (показать пример использования) …

Помните, большую часть времени вы будете поддерживать свой собственный код. Так что на самом деле вы делаете услугу для себя, документируя код, который вы пишете.

И последнее, но не менее важное, есть многочисленные способы Чтобы разобрать всю документацию и вывод полностью отформатированной усадки для документирования вашего API.