Search code examples
javascriptdictionaryjsdoc

How to document a dictionary in JSDoc?


Having next example:

var CONF = {
    locale: {
        "en": {
            name: "English",
            lang: "en-US"
        },
        "es": {
            name: "Spanish",
            lang: "es-ES"
        }
    }
};

And knowing that what the locale property contains is a dictionary object, which comes from the database, how can I document its inner properties with JSDoc?

Currently I am thinking to typedef type for my locale objects, then may I be able to set the locale property to simply an Array of my defined type? Is this the right way to do it?


Solution

  • According to the JSDoc 3 docs:

    Arrays and objects (type applications and record types)

    An object with string keys and number values:

    {Object.<string, number>}

    So it would be:

    /** @type {{locales: Object.<string, {name: string, lang: string}>}} */
    var CONF = {
        locales: {
            en: {
                name: "English",
                lang: "en-US"
            },
            es: {
                name: "Spanish",
                lang: "es-ES"
            }
        }
    };
    

    Cleaner, using @typedef

    /**
     * @typedef {{name: string, lang: string}} Locale
     */
    /**
     * @type {{locales: Object.<string, Locale>}}
     */
    var CONF = {
        locales: {
            en: {
                name: "English",
                lang: "en-US"
            },
            es: {
                name: "Spanish",
                lang: "es-ES"
            }
        }
    };