> JSDoc在线手册 > @type

@type


描述: 记录一个对象的类型。

语法

@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; 

上一篇:
下一篇: