描述: 记录一个对象的类型。
@type {typeName}
@type标签允许你提供一个表达式,用于标识一个标识符可能包含的值的类型,或由函数返回值的类型。您还可以将其包含与其他JSDoc标签类型的表达式结合使用,如@param 标签。
类型表达式可以包括标识符的namepath(例如,myNamespace.MyClass
);一个内置的JavaScript类型(例如,string
);或这些的组合。你可以使用任何Google Closure Compiler 的类型表达式,还有其他几种JSDoc所特有的格式。
如果JSDoc确定一个类型表达式是无效的,它会显示一个错误并停止运行。您可以通过与--lenient
选项运行JSDoc把这个错误变成警告。
注意:在JSDoc3.2及更高版本完全支持Google Closure Compiler风格的类型表达式。早期版本的JSDoc支持部分的Google Closure Compiler类型表达式。
每种类型是通过使用下面描述的格式之一,提供一个类型表达式指定的。 在适当情况下,JSDoc将自动创建链接到其他标识符的文档。例如,@type {MyClass}
将链接到MyClass的文档,如果该标识符已经被文档化。
类型名 | 语法示例 | 描述 |
---|---|---|
Symbol name (name expression) |
{boolean} {myNamespace.MyClass} |
指定符号的名称。 如果标识符已经被文档化,JSDoc将创建一个链接到该标识符的文档。 |
Multiple types (type union) |
{(number|boolean)} 表示数字或布尔 |
这意味着值可能是几种类型中的一种,用括号括起来,并用"|"分隔类型的完整列表。 |
Arrays and objects (type applications and record types) |
MyClass的实例的数组 {Array.} // or: {MyClass[]} 具有字符串键和数字值的对象: {Object.} 对象“MyObj”中具有属性 'a' (一个数字), 'b' (一个字符串) 和 'c' (任何类型) {a: number, b: string, c} myObj // or: {Object} myObj {number} myObj.a {string} myObj.b {} myObj.c |
JSDoc支持 Closure Compiler 语法定义的数组和对象类型。 还可以通过array后面附加`[]`指示包含在数组中的类型。例如,表达式`string[]`表示字符串数组。 对于具有一组已知的属性的对象,你可以使用 Closure Compiler 语法文档化标注的类型。您可以分别描述每个属性,这使您能够提供有关每个属性的更多详细信息。 |
Nullable type |
一个数字或null {?number} |
指明类型为指定的类型,或者为null。 |
Non-nullable type |
一个数字,但是绝对不会是null {!number} |
指明类型为指定的类型,但是绝对不会是null。 |
Variable number of that type | 此函数接受可变数量的数值参数。<br>@param {...number} num |
表示该函数接受可变数量的参数,并指定一个类型的参数。 例如: /** * Returns the sum of all numbers passed to the function. * @param {...number} num A positive or negative number */ function sum(num) { var i=0, n=arguments.length, t=0; for (; i t += arguments[i]; } return t; } |
Optional parameter |
一个可选参数“foo”<br>@param {number} [foo] // or:<br>@param {number=} foo 一个可选参数“foo”,默认值为1。<br>@param {number} [foo=1] |
指示参数是可选的。当使用JSDoc的语法表示可选参数时,你还可以指明参数的默认值。 |
Callbacks |
/** * @callback myCallback * @param {number} x - ... */ /** @type {myCallback} */ var cb; |
使用@callback标签指明一个回调。和@typedef标签是相同的,不同之处在于回调的类型始终是"function"。 |
Type definitions |
记录'id', 'name', 'age'属性的类型/** * @typedef PropertiesHash * @type {object} * @property {string} id - an ID. * @property {string} name - your name. * @property {number} age - your age. * / /** @type {PropertiesHash} */ var props; |
您可以使用@typedef标签记录复杂类型,然后参考类型定义在你文档的其他地方。 |
例如:
/** @type {(string|Array.<string>)} */
var foo;
/** @type {number} */
var bar = 1;
在许多情况下,您可以包含一个类型表达式作为另一个标签的一部分,而不是在你的JSDoc注释块中包含独立@type标签。
例如,类型表达式可以有多个标签:
/**
* @type {number}
* @const
*/
var FOO = 1;
// same as:
/** @const {number} */
var FOO = 1;