### Functions

    /**
     * This is a function.
     *
     * @param {string} n - A string param
     * @return {string} A good string
     *
     * @example
     *
     *     foo('hello')
     */

    function foo(n) {
      return n
    }

See: http://usejsdoc.org/index.html

### Types

Type | Description
--- | ---
`@param {string=} n` | Optional
`@param {string} [n]` | Optional
`@param {(string|number)} n` | Multiple types
`@param {*} n` | Any type
`@param {...string} n` | Repeatable arguments
`@param {string} [n="hi"]` | Optional with default
`@param {string[]} n` | Array of strings
`@return {Promise<string[]>} n` | Promise fulfilled by array of strings

See: http://usejsdoc.org/tags-type.html

### Variables

    /**
     * @type {number}
     */
    var FOO = 1

    /**
     * @const {number}
     */
    const FOO = 1

### Typedef

    /**
     * A song
     * @typedef {Object} Song
     * @property {string} title - The title
     * @property {string} artist - The artist
     * @property {number} year - The year
     */

    /**
     * Plays a song
     * @param {Song} song - The {@link Song} to be played
     */

    function play(song) {}

See: http://usejsdoc.org/tags-typedef.html

### Typedef Shorthand

    /**
     * A song
     * @typedef {{title: string, artist: string, year: number}} Song
     */

    /**
     * Plays a song
     * @param {Song} song - The {@link Song} to be played
     */

    function play(song) {}

See: http://usejsdoc.org/tags-typedef.html

### Importing types

    /**
     * @typedef {import('./Foo').default} Bar
     */

    /**
     * @param {Bar} x
     */

    function test(x) {}

This syntax is TypeScript-specific.

### Other keywords

    /**
     * @throws {FooException}
     * @private
     * @deprecated
     * @see
     *
     * @function
     * @class
     */

### Renaming

    /*
     * @alias Foo.bar
     * @name Foo.bar
     */

Prefer `alias` over `name`. See: http://usejsdoc.org/tags-alias.html

0 Comments for this cheatsheet. Write yours!