如何在JSDoc中记录字典?


77

下一个例子:

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

并且知道语言环境属性包含的是来自数据库的字典对象,如何使用JSDoc记录其内部属性?

目前,我正在考虑typedef 为语言环境对象键入内容,那么我是否可以将locale属性设置为简单地定义类型的Array?这是正确的方法吗?

Answers:


127

根据JSDoc 3文档

数组和对象(类型应用程序和记录类型)

具有字符串键和数字值的对象:

{Object.<string, number>}

因此它将是:

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

清洁,使用 @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"
        }
    }
};

1
双花括号是什么意思?
MinhNghĩa20年

2
@MinhNghĩa是花括号中的对象。
JakeDK '20

是的,我发现了...突出显示FTW的VS代码语法
MinhNghĩa20年

2

据我所知:

使用@typedef@property定义自定义类型是JSDoc中的“正确”方法。但是,编写和阅读很麻烦(文档中的主要罪过)。

记录类型更加整洁(请注意double {{):

   /** {{
         name:string, 
         lang:string
   }} */

3
嗯...这记录了语言环境对象中的一个单一条目,我错了吗?顺便说一句,由于语言描述,该评论未通过验证,您应将其删除;)
ÁxelCostas Pena 2013年

你没看错!我认为这是给您最有用的代码段,因为语言环境var是自定义类型语言环境对象的映射。
Daniel Winterstein

如果字典是基于数组的,则它可以是{Array <{key:string,value:{name:string,lang:string}}>}或{{key:string,value:{name:string,lang:string} } []} ...静态对象往往是Java脚本中键值的字典,在我的情况下,在ÁxelCostasPena方案中,我更喜欢使用ÁxelCostasPena解决方案。
deadManN
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.